Multimodule projects
каждый pom.xml файл описывает build workflow для одного проекта, в конечной фазе которого мы имеем один артефакт установленный в локальный и удаленный репозитарий. однако Maven позволяет легко и удобно работать с многомодульными проектами. при этом задача управления зависимостями между внешними библиотеками и между модулями внтури проекта полностью решается самим Maven.Особенности конфигурации
для того, чтобы сконфигурировть build workflow для multimodule project необходимо- создать в корневом каталоге, общем для всех модулей, pom.xml файл родительского модуля, для которого указать
...такое значение артефакта указывается Maven на то, что данный проект является мета-проектом и не требует сборки конечного артефакта на выходе. в итоге в репозитариях будет просто сгенерирована мета-информация об этом проекте, без наличия конркетных артефактов.
<packaging>pom</packaging>
...
- далее в родительском pom.xml файле мы должны определить конфигурацию модулей
...где
<modules>
<module>module1_directory_name</module>
<module>module2_directory_name</module>
...
<module>moduleN_directory_name</module>
</modules>
...
module_directory_name -- имя каталога, в котором находятся файлы конкретного модуля.
Важно: имена модулей в родительском pom.xml и имена каталогов, в котором расположены файлы модуля должны быть идентичны. имена каталогов модулей обрабатываются как пути к этим каталогам. таким образом, если структура конкретного проекта предполагает взаимонезависимое расположение каталогов с модулями, то следует указывать их абсолютные или отностительные пути
- для pom.xml каждого из модулей, входящих в multimodule project необходимо указать
...где
<parent>
<groupId>project_group_id</groupId>
<actifactId>parent_artifact_id</artifactId>
<version>project_version</version>
[<relativePath>path_to_parent_pom.xml</relativePath>]
...
project_group_id -- идентификатор группы, в которой будут сохранены все артефакты проекта. в случае multimodel project может быть указана для родительского модуля и parent-секции модуля. для конкретных модулей наследуется из родительского, если не указана явно
parent_artifact_id -- идентификатор артефакта родительского проекта. этот интификатор необходим в любом случае и для любого проекта. даже для мета-проекта, которым часто является родительский проект
project_version -- текущая версия проекта. в случае multimodel project может быть указана для родительского модуля и parent-секции модуля. для конкретных модулей наследуется из родительского, если не указана явно
relativePath -- относительный путь к родительскому pom.xml. его необходимо указать в том случае, если каталог уровнем выше каталога модуля, не содержит родительского pom.xml
Важно: родительский pom.xml может определять различные кастомизации стандартных и не стандартных плагинов, обшие для всех модулей. однако следует помнить, что каждая задача, определенная в родительском pom.xml проекта, будет выполнена для каждого модуля проекта.
есть предположение, что для версии Maven 2.2.1 данное поведение исправлено. но я еще не проверял этого в своих проектах
есть предположение, что для версии Maven 2.2.1 данное поведение исправлено. но я еще не проверял этого в своих проектах