Задача
Есть проект со сложной иерархией - корневая pom-ка содержит ряд модулей, каждый из модулей, в свою очередь, так является многомодульным и т.п.:
pom.xml
|_ module1
|_ pom.xml
|_ submodule1
|_ pom.xml
|_ submodule2
|_ pom.xml
|_ module2
|_ pom.xml
|_ submdule3
|_ pom.xml
Есть желание задавать версию всего проекта только в корневой pom-ке, чтобы все вложенные модули ее наследовали.
Однако, не все так просто, как хотелось бы. Ситуация следующая:
- Дочерний проект может не указывать в своей pom-ке версию, тогда версия подтянется из родительского проекта. И это хорошо.
- Однако, когда мы в pom-ке дочернего проекта указываем родителя, его версия является обязательной, хотя, казалось бы, при указании relativePath в этом нет необходимости - определение родительского проекта по указанному относительному пути в любом случае будет однозначным
Решение
Решение нетривиально и подсказано https://www.igorkromin.net/index.php/2015/11/08/getting-around-mavens-parent-child-project-version-dependency-issue/. В качестве версии родительского проекта во всех дочерних pom-ках указываем не конкретную версию, а диапазон версий, заведомо более широкий, чем реально возможные версии проекта:
<parent>
<groupId>somegroup</groupId>
<artifactId>someparent</artifactId>
<version>[1.0,99.0)</version>
<relativePath>../</relativePath>
</parent>
В итоге, версия задается только в верхнеуровневой pom-ке и пропагируется во все дочерние проекты.
Подход работает на Maven 3.2.2+.
Комментариев нет:
Отправить комментарий