В проекте Maven, как я могу автоматически обновлять версию всех дочерних модулей, а также родителя?
У меня есть многомодульный проект.
parent POM (1.0-SNAPSHOT)
|-- module1 (1.0-SNAPSHOT)
|-- module2 (1.0-SNAPSHOT)
`-- module3 (1.0-SNAPSHOT)
Когда я выполняю выпуск mvn: подготовьте его, убедитесь, что родительский POM имеет версию SNAPSHOT, и все зависимые модули не имеют версии SNAPSHOT. Как автоматически обновлять все дочерние модули от SNAPSHOT до следующей версии?
Я бы хотел автоматически увеличить версию для всех модулей.
Ответы
Ответ 1
Плагин release может справиться с этим. Вы проверили Обновление версий POM? Но...
Я ничего не понимаю. Изменение версии в POM с x-SNAPSHOT на новую версию и наложение версии в POM на новое значение 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>
Ответ 2
Гибкий способ установки версий poms, включая мультимодульные проекты, Версии Maven Plugin.
mvn versions:set -DnewVersion=your_new_version
Он будет настраивать все версии pom, родительские версии и дочерние версии в многомодульном проекте.
затем
mvn versions:commit
или
mvn versions:revert
Ответ 3
- Определите версию всех подпроектов в родительском 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 one
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
Ответ 4
Существует потенциально лучший вариант в 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})
Однако в этой схеме релиз: подготовка, вероятно, не будет обновлять для вас profiles.xml.
Ответ 5
Использование "фиксированной" родительской версии как указанной здесь, также может помочь вам.
Ответ 6
У вас также есть плагин Maven Version, который поможет вам справиться с такими вещами...