завел мой врач издалека.
410013796724260
• Webmoney
R335386147728
Z369087728698
Наследование проектов в mavenОдним из важных аспектов многомодульного приложения является возможность независимой разработки отдельных модулей, обеспечивая, таким образом, расширение и изменение функциональности системы в целом. И здесь существенную помощь разработчикам оказывает фреймворк maven, который позволяет связать все проекты системы в единое целое. Чтобы объединить несколько maven-проектов в один связанный проект необходимо использовать наследование, которое определяет включение дополнительных секций в pom.xml (POM - Project Object Model). Допустим необходимо разработать два взаимосвязанных проекта (project1, project2), которые должны быть объединены в едином родительском проекте project. Физически проекты необходимо расположить в одной родительской директории, в которой дочерние maven-проекты являются поддиректориями. Родительский файл pom.xml располагается в корневой директории, как это представлено на следующем скриншоте : Настройка родительского pom.xml В pom.xml родительского проекта необходимо определить параметры GAV (groupId, artifactId, version) и в теге <packaging> указать значение «pom». Дополнительно вводится секция <modules>, в которой перечисляются все дочерние проекты. <groupId>com.example</groupId> <artifactId>project</artifactId> <version>0.0.1</version> <packaging>pom</packaging> . . . <modules> <module>project1</module> <module>project2</module> </modules> Настройка дочерних pom.xml В pom.xml дочерних проектов необходимо ввести секцию <parent> и определить GAV-параметры родительского проекта. <parent> <groupId>com.example</groupId> <artifactId>project</artifactId> <version>0.0.1</version> </parent> На этом можно сказать, что все дочерние проекты привязаны к родительскому. Применение наследования mavenНаследование в maven-проектах широко используется при разработке плагинов/бандлов для контейнеров OSGi (Open Services Gateway Initiative) и компонентов EJB (Enterprise JavaBeans). Также можно использовать «преимущества» наследования и в простых проектах. Зачем объединять проекты?В связанных многомодульных проектах можно исключить дублирование свойств и зависимостей, а также использовать централизованное управление и контролировать зависимости. 1. Общие свойства проектовСвязанные проекты позволяют определить общие свойства проектов, зависимости и разместить их в родительском pom.xml. Дочерние проекты будут автоматически наследовать свойства родителя. В следующем примере создаются общие секции <properties> и <dependencies>. В секцию зависимостей включены junit и log4j. <properties> <junit.version>4.11</junit.version> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> Дочерние объекты наследуют значения следующих GAV-параметров родителя : <groupId>, <version>, но их можно при необходимости переопределить. 2. Централизованное управление проектамиВыполняя maven-команды в родительском проекте, они автоматически будут выполнены для каждого из подпроектов. В следующем примере выполняется команда install, согласно которой после сборки всех проектов они будут размещены в локальном репозитории. $ cd project $ mvn install Таким образом, можно выполнять maven команды как для отдельного подпроекта, перемещаясь в его поддиректорию, так и для всех проектов вместе, располагаясь в родительской директории. Чтобы посмотреть список зависимостей проекта/ов, необходимо выполнить команду «mvn dependency:tree» : $ cd project $ mvn dependency:tree [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] Main project [INFO] Chaild project1 [INFO] Chaild project2 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Main project 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project --- [INFO] com.example:project:pom:0.0.1 [INFO] +- junit:junit:jar:4.11:test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] \- log4j:log4j:jar:1.2.17:compile [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Chaild project1 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project1 --- [INFO] com.example:project1:jar:0.0.1 [INFO] +- junit:junit:jar:4.11:test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] \- log4j:log4j:jar:1.2.17:compile [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Chaild project2 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ project2 --- [INFO] com.example:project2:jar:0.0.1 [INFO] +- junit:junit:jar:4.11:test [INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] \- log4j:log4j:jar:1.2.17:compile [INFO] ------------------------------------------------------------------------ Maven сначала выводит в консоль зависимости главного проекта, а потом зависимости для каждого из дочерних проектов. Как видно в примере значения groupId (com.example) и version (0.0.1) дочерних проектов совпадают с родительским. Они теперь необязательны и берутся по умолчанию у parent проекта, хотя можно определить собственные значения для каждого подпроекта. Кроме свойств <properties> и зависимостей <dependencies> в родительском проекте часто объявляют необходимые для сборки плагины и репозитории. Скачать примерРассмотренный пример создания многомодульного приложения можно скачать здесь (1.6 Кб). Пример многомодульного maven проекта, включающего исполняемый и 3 архивных jar-модулей представлен здесь. В данном примере исполняемый модуль динамически загружает архивные/обычные. |