我有一个多模块项目。
父 POM (1.0-SNAPSHOT) |-- 模块1 (1.0-SNAPSHOT) |-- 模块2 (1.0-SNAPSHOT) `--模块3(1.0-SNAPSHOT)
当我执行 mvn release:prepare 它验证父 POM 具有 SNAPSHOT 版本并且所有依赖模块都没有 SNAPSHOT 版本。如何自动将所有子模块从 SNAPSHOT 更新到下一个发布版本?
我想自动增加所有模块的版本。
我有一个多模块项目。
父 POM (1.0-SNAPSHOT) |-- 模块1 (1.0-SNAPSHOT) |-- 模块2 (1.0-SNAPSHOT) `--模块3(1.0-SNAPSHOT)
当我执行 mvn release:prepare 它验证父 POM 具有 SNAPSHOT 版本并且所有依赖模块都没有 SNAPSHOT 版本。如何自动将所有子模块从 SNAPSHOT 更新到下一个发布版本?
我想自动增加所有模块的版本。
设置 poms 版本(包括多模块项目)的灵活方法是Versions Maven Plugin。
mvn versions:set -DnewVersion=your_new_version
它将调整多模块项目中的所有 pom 版本、父版本和子版本。
然后
mvn versions:commit
或者
mvn versions:revert
发布插件可以处理这个问题。你检查更新 POM 版本了吗?但是...我没有得到任何东西。将 POM 中的版本从 x-SNAPSHOT 更改为新版本并将POM 中的版本更改为新值 y-SNAPSHOT应按照准备发布中的release:prepare
说明完成。使用这个目标时出了什么问题?
更新:该autoVersionSubmodules
参数可能是您正在寻找的。从 准备发布示例:
多模块项目
系统将提示您输入项目每个模块的版本号。如果您希望每个模块都获得与父 POM 相同的版本,您可以将选项设置
autoVersionSubmodules
为true
. 现在将只询问一次发布版本和下一个开发版本。
<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>
确保所有子项目的版本与其父项目的版本相同。
<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
然后将这些子项目中定义的父版本更新为最新版本
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
这是一个解决方法,因为您不能在没有列出明确版本的情况下引用子模块 pom 中的顶级 pom。(这就是 MNG-624 的错误)它解释了如何为版本提供一个位置(在顶级 profiles.xml 文件中),并且在所有 pom.xml 文件中简单地有一个属性引用(即${当前版本})
但是,在这个方案版本中:prepare 可能不会为您更新profiles.xml。