我有一个多模块maven项目。我们打算将所有这些模块一起版本化。但截至目前,我正在每个模块pom.xml中结束硬编码版本,如下所示
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>
并且主要父模块具有以下配置
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
答案 0 :(得分:522)
使用versions:set
中的versions-maven plugin:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
它将调整多模块项目中的所有pom版本,父版本和依赖版本。
如果你犯了错误,请执行
mvn versions:revert
之后,或
mvn versions:commit
如果您对结果感到满意。
注意:此解决方案假定所有模块也使用聚合pom作为父pom,这个场景在此答案时被视为标准。如果不是这种情况,请转到Garret Wilson's answer。
答案 1 :(得分:33)
给定的答案假设有问题的项目除了模块聚合外还使用项目继承。事实上,这些是不同的概念:
某些项目可能是模块的聚合,但在聚合器POM和聚合模块之间没有父子关系。 (可能根本没有父子关系,或者子模块可能使用单独的POM作为&#34;父母&#34 ;.)在这些情况下,给定的答案将不起作用。
经过大量阅读和实验,结果证明有一种方法可以使用Versions Maven Plugin不仅更新聚合器POM,还可以更新所有聚合模块;它是processAllModules
选项。必须在聚合器项目的目录中执行以下命令:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules
版本Maven插件不仅会更新所有包含模块的版本,还会更新模块间的依赖关系!这是一个巨大的胜利,将节省大量时间,并防止各种问题。
当然不要忘记在所有模块中提交更改,您也可以使用相同的开关进行更改:
mvn versions:commit -DprocessAllModules
您可以决定完全免除备份POMS并在一个命令中执行所有操作:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
答案 2 :(得分:21)
您可能需要查看Maven发布插件的release:update-versions目标。它将更新父版本及其下的所有模块。
更新:请注意以上是发布插件。如果您没有发布,可能需要使用versions:set
mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
答案 3 :(得分:11)
我鼓励您阅读Maven Book about multi-module(reactor)版本。
我特别指的是以下内容:
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>
应改为。这里只关注它定义的父部分中未定义的版本。
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>xyz-application</artifactId>
<groupId>com.xyz</groupId>
<version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
答案 4 :(得分:6)
如果您想完全自动化该过程(即您想增加版本号而不必知道当前版本号是什么),您可以这样做:
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit
答案 5 :(得分:4)
versions:update-child-modules
听起来就像你在寻找什么。你可以做版本:如上所述设置,但这是一种轻量级的方式来更新父版本号。对于子模块,我认为您应该删除<version>
定义,因为它们将继承父模块的版本号。
答案 6 :(得分:2)
最好的方法是,由于您打算将模块捆绑在一起,因此您可以在<dependencyManagement>
标记下的最外侧pom.xml
(父模块)中指定<project>
标记。它控制版本和组名称。在您的单个模块中,您只需在<artifactId>
中指定pom.xml
标记即可。它将采用父文件的版本。
答案 7 :(得分:1)
worked for us上面给出的解决方案也很长时间了:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
但是它昨天停止工作了,由于a recent bug in a the versions-maven-plugin
,我们发现了它我们的workaround was to change the parent/pom.xml(临时)文件如下:
--- jackrabbit/oak/trunk/oak-parent/pom.xml 2020/08/13 13:43:11 1880829
+++ jackrabbit/oak/trunk/oak-parent/pom.xml 2020/08/13 15:17:59 1880830
@@ -329,6 +329,13 @@
<artifactId>spotbugs-maven-plugin</artifactId>
<version>3.1.11</version>
</plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>versions-maven-plugin</artifactId>
+ <version>2.7</version>
+ </plugin>
+
答案 8 :(得分:0)
最简单的方法是将每个pom.xml中的版本更改为任意版本。然后检查依赖性管理以使用此模块中使用的模块的正确版本!例如,如果您要增加拖曳模块项目的版本控制,则必须像下面这样:
在子模块中:
<parent>
<artifactId>A-application</artifactId>
<groupId>com.A</groupId>
<version>new-version</version>
</parent>
并在父模块中:
<groupId>com.A</groupId>
<artifactId>A-application</artifactId>
<version>new-version</version>
答案 9 :(得分:0)
要更新子模块上的主要pom.xml和父版本:
mvn versions:set -DnewVersion=1.3.0-SNAPSHOT -N versions:update-child-modules -DgenerateBackupPoms=false
答案 10 :(得分:0)
我一直在寻找这个:
atoms.loc[atoms.element != 'H']