Плагин Versions не обновляет дочерние модули, просто обновляется родительский модуль
У меня есть родительский pom с модулями, определенными так:
родитель pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<modelVersion>4.0.0</modelVersion>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>1.0.2-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../proj1</module>
<module>../proj2</module>
</modules>
</project>
Вот файлы pom дочернего модуля:
proj2 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>1.0.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>proj2</groupId>
<artifactId>proj2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
proj1 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmln:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>1.0.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>proj1</groupId>
<artifactId>proj1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
Но когда я использую плагин версий, он просто устанавливает номер родительской версии, а не его модули. Вот команда, которую я использую:
versions:set -DnewVersion=1.0.2-SNAPSHOT
Вот вывод:
[INFO] proj1 ...................................... SKIPPED
[INFO] proj2 ...................................... SKIPPED
[INFO] parent ......................................SUCCESS
Подмодули пропускаются. Как я могу разрешить обновлять подмодули, а не только родительский модуль?
Обновление: я попытался удалить тег версии из дочернего модуля, поэтому дочерний модуль теперь:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>1.0.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>proj2</groupId>
<artifactId>proj2</artifactId>
<packaging>war</packaging>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>1.0.2-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>proj1</groupId>
<artifactId>proj1</artifactId>
<packaging>war</packaging>
</project>
Но номер версии не обновляется в дочерних pom-файлах.
Обновление: вот как я думаю, что этот процесс работает, пожалуйста, не стесняйтесь предлагать изменения:
Теоретически (я не проверял это) во вложенной файловой структуре Maven будет обновлять отдельные номера версий для каждого дочернего модуля, когда выполняется цель: 'ons:set -DnewVersion=1.0.2-SNAPSHOT'.
Однако в плоской файловой структуре не требуется указывать номер версии в дочерних модулях, если родительский модуль имеет ту же версию. Это связано с тем, что номер дочерней версии, если он не установлен, будет использовать номер родительской версии. Таким образом, чтобы обновить все дочерние модули родительского модуля, просто обновите номер версии родительского модуля, если у всех дочерних модулей не установлен номер версии, у них будет тот же номер версии, что и у родительского модуля.
3 ответа
Хорошо, теперь, если ваши дочерние модули ссылаются на родительский pom, вы можете удалить тег версии из poms дочерних модулей, чтобы они унаследовали версию от родительского pom.
Поскольку версия наследуется от pom, при использовании плагина версии все модули будут иметь одинаковую версию.
Это, вероятно, не поможет вам, но звучит так: JIRA MRELEASE-261: release: prepare должно поддерживать многомодульные проекты с несколькими модулями
Плоская структура не рекомендуется. Это "старая практика" (Eclipse?) Разработчиков. Я использовал его долгое время, а затем обнаружил преимущества подхода Maven.
Старый способ:
parent
`-- pom.xml
submodule 1
`-- pom.xml
submodule 2
`-- pom.xml
Maven путь:
parent
|-- submodule 1
| `-- pom.xml
|-- submodule 2
| `-- pom.xml
`-- pom.xml
Вы можете найти больше информации здесь: