我有一个多模块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>
Run Code Online (Sandbox Code Playgroud)
主要父模块具有以下配置
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
Run Code Online (Sandbox Code Playgroud)
Sea*_*oyd 578
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
它将调整多模块项目中的所有pom版本,父版本和依赖版本.
如果你弄错了,那就去做吧
mvn versions:revert
Run Code Online (Sandbox Code Playgroud)
之后,或
mvn versions:commit
Run Code Online (Sandbox Code Playgroud)
如果你对结果感到满意.
注意:此解决方案假定所有模块也使用聚合pom作为父pom,这个场景在此答案时被视为标准.如果情况并非如此,那就去找Garret Wilson的答案吧.
Gar*_*son 44
给定的答案假设有问题的项目除了模块聚合之外还使用项目继承.事实上,这些是不同的概念:
某些项目可能是模块的聚合,但聚合器POM和聚合模块之间没有父子关系.(可能根本没有父子关系,或者子模块可能使用单独的POM作为"父".)在这些情况下,给定的答案将不起作用.
经过大量的阅读和实验,结果证明有一种方法可以使用Versions Maven插件不仅更新聚合器POM,还可以更新所有聚合模块; 这是processAllModules
选择.必须在聚合器项目的目录中执行以下命令:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules
Run Code Online (Sandbox Code Playgroud)
版本Maven插件不仅会更新所有包含模块的版本,还会更新模块间的依赖关系!!!! 这是一个巨大的胜利,将节省大量时间,并防止各种问题.
当然不要忘记在所有模块中提交更改,您也可以使用相同的开关:
mvn versions:commit -DprocessAllModules
Run Code Online (Sandbox Code Playgroud)
您可以决定完全免除备份POMS并在一个命令中执行所有操作:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
Run Code Online (Sandbox Code Playgroud)
Nis*_*ant 22
您可能需要查看Maven发布插件的发布:更新版本目标.它将更新父版本以及其下的所有模块.
更新:请注意以上是发布插件.如果您没有发布,您可能想要使用versions:set
mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
Cru*_*mmy 15
如果要完全自动化该过程(即您希望增加版本号而不必知道当前版本号是什么),则可以执行以下操作:
mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit
Run Code Online (Sandbox Code Playgroud)
khm*_*ise 11
我鼓励您阅读有关多模块(reactor)构建的Maven Book.
我特别指的是以下内容:
<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>
Run Code Online (Sandbox Code Playgroud)
应改成.这里只关注它定义的父部分中未定义的版本.
<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>
Run Code Online (Sandbox Code Playgroud)
这是一个更好的链接.
上面给出的解决方案对我们也有效了很长时间:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
然而它昨天停止工作了,我们发现它是由于versions-maven-plugin 中最近的错误
我们的(临时)解决方法是更改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>
+
Run Code Online (Sandbox Code Playgroud)
versions:update-child-modules
听起来像您要找的东西。您可以按照上面提到的方法进行versions:set,但这是更新父版本号的轻量级方法。对于子模块,我认为您应该删除<version>
定义,因为它们将继承父模块的版本号。
小智 5
要更新子模块上的主 pom.xml 和父版本:
mvn versions:set -DnewVersion=1.3.0-SNAPSHOT -N versions:update-child-modules -DgenerateBackupPoms=false
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
223776 次 |
最近记录: |