我有一个多模块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>
7 回答
使用versions-maven plugin中的versions:set:
它将调整多模块项目中的所有pom版本,父版本和依赖版本 .
如果你弄错了,那就去做吧
之后,或
如果你对结果感到满意 .
注意:此解决方案假定所有模块也使用聚合pom作为父pom,这个场景在此答案时被视为标准 . 如果不是这样,请转到Garret Wilson's answer .
给定的答案假设有问题的项目除了模块聚合之外还使用项目继承 . 事实上,这些是不同的概念:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
某些项目可能是模块的聚合,但聚合器POM和聚合模块之间没有父子关系 . (可能根本没有父子关系,或者子模块可能使用单独的POM作为“父” . )在这些情况下,给定的答案将不起作用 .
经过大量阅读和实验,结果证明有一种方法可以使用Versions Maven Plugin不仅更新聚合器POM,还可以更新所有聚合模块;它是
processAllModules
选项 . 必须在聚合器项目的目录中执行以下命令:版本Maven插件不仅会更新所有包含模块的版本,还会更新模块间的依赖关系!!!!这是一个巨大的胜利,将节省大量时间,并防止各种问题 .
当然不要忘记在所有模块中提交更改,您也可以使用相同的开关:
您可以决定完全免除备份POMS并在一个命令中执行所有操作:
您可能想要查看Maven发布插件的release:update-versions目标 . 它将更新父版本以及其下的所有模块 .
更新:请注意以上是发布插件 . 如果你没有发布,你可能想要使用
versions:set
我鼓励你阅读Maven Book about multi-module(reactor)版本 .
我特别指的是以下内容:
应改成 . 这里只关注它定义的父部分中未定义的版本 .
这is a better link .
如果要完全自动化该过程(即,您希望增加版本号而不必知道当前版本号是什么),则可以执行以下操作:
versions:update-child-modules
听起来像你认为你应该删除<version>
定义,因为它们将继承父模块的版本号 .最好的方法是,由于您打算将模块捆绑在一起,您可以在
<project>
标记下直接在最外面的pom.xml
(父模块)中指定<dependencyManagement>
标记 . 它控制版本和组名称 . 在您的单个模块中,您只需在pom.xml
中指定<artifactId>
标记即可 . 它将从父文件中获取该版本 .