В проекте Maven, как я могу автоматически обновить версию всех дочерних модулей, плюс родительский?
-
23-09-2019 - |
Вопрос
У меня есть многомодульный проект.
parent POM (1.0-SNAPSHOT) |-- module1 (1.0-SNAPSHOT) |-- module2 (1.0-SNAPSHOT) `-- module3 (1.0-SNAPSHOT)
Когда я выполняю mvn release: подготовьте его, убедитесь, что родительский POM имеет версию моментального снимка, а все зависимые модули не имеют версии моментального снимка.Как автоматически обновить все дочерние модули из моментального снимка до следующей версии выпуска?
Я хотел бы автоматически увеличивать версию для всех модулей.
Решение
Плагин release может справиться с этим.Вы проверяли Обновление версий POM?Но...Я чего-то не понимаю. Изменение версии в POMS с x-SNAPSHOT на новую версию и изменение версии в POMs на новое значение y-SNAPSHOT должно быть сделано с помощью release:prepare
как объяснено в Подготовьте релиз.Что происходит не так при использовании этой цели?
Обновить: В autoVersionSubmodules
параметр может быть тем, что вы ищете.Из Подготовьте релиз пример:
Многомодульные проекты
Вам будет предложено ввести версию номер для каждого модуля проекта.Если вы предпочитаете, чтобы каждый модуль получал ту же версию, что и родительский POM, вы можете установить параметр
autoVersionSubmodules
Дляtrue
.Теперь вас попросят только один раз указать версию для выпуска и следующую версию для разработки.
Фрагмент родительского pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>x.y.z</version>
<configuration>
<goals>deploy</goals>
<autoversionsubmodules>true</autoversionsubmodules>
</configuration>
</plugin>
</plugins>
</build>
Другие советы
Гибкий способ настройки версий poms, включая многомодульные проекты, заключается в Версии плагина Maven.
mvn versions:set -DnewVersion=your_new_version
Это скорректирует все версии pom, родительские версии и дочерние версии в многомодульном проекте.
тогда
mvn versions:commit
или
mvn versions:revert
- Сделайте так, чтобы версия всего подпроекта была определена в его родительском элементе pom.xml.
Убедитесь, что версии всех подпроектов совпадают с версией их родителя.
<groupId>com.xyz</groupId> <artifactId>module-1</artifactId> <packaging>jar</packaging> <parent> <groupId>com.xyz</groupId> <artifactId>xyz-parent</artifactId> <version>1.0.123-SNAPSHOT</version> </parent>
<?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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>xyz-parent</artifactId> <groupId>com.xyz</groupId> <version>1.0.123-SNAPSHOT</version> <packaging>pom</packaging> <name>xyz-parent</name> <dependencyManagement> <dependencies> <!-- Message --> <dependency> <groupId>com.xyz</groupId> <artifactId>module-1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.xyz</groupId> <artifactId>module-2</artifactId> <version>${project.version}</version> </dependency> </dependencyManagement> </project>
Создайте еще один pom.xml чтобы сгруппировать эти проекты вместе.
<modules> <module>../xyz-parent</module> <module>../module-1</module> <module>../module-2</module> </modules>
Затем обновите версию родительского проекта, а затем создайте его с помощью приведенной ниже команды.
mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT mvn clean install
Затем обновите родительскую версию, которая определена в этих подпроектах, до версии latset
mvn -N versions:update-child-modules
Затем соберите их вместе.
@echo on cd .\xyz-parent call mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT -o call mvn versions:commit -o call mvn clean install -o :::http://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html cd ..\xyz-buildaggregate-ide call mvn -N versions:update-child-modules -o call mvn clean install -o
Есть потенциально лучший вариант по адресу https://issues.apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14415968
Это обходной путь для того факта, что вы не можете ссылаться на pom верхнего уровня в poms подмодуля без указания явной версии.(именно об этом и идет речь в ошибке MNG-624) В нем объясняется, как вы можете иметь единственное местоположение для версии (в файле верхнего уровня profiles.xml) и просто иметь ссылки на свойства во всех файлах pom.xml (т.е.${CurrentVersion})
Однако в этой схеме release:prepare, вероятно, не будет обновляться profiles.xml для вас.