更新多模块 Maven 项目中模块的版本号

2022-08-31 04:38:59

我有一个多模块专家项目。我们打算将所有这些模块一起进行版本控制。但截至目前,我最终在每个模块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>

答案 1

使用版本:版本-maven 插件设置:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

它将调整多模块项目中的所有 pom 版本、父版本和依赖项版本。

如果您犯了错误,请执行

mvn versions:revert

之后,或

mvn versions:commit

如果您对结果感到满意。


注意:此解决方案假设所有模块也使用聚合 pom 作为父 pom,这种情况在回答此问题时被认为是标准的。如果不是这样,请参考加勒特·威尔逊的答案


答案 2

给出的答案假定相关项目除了使用模块聚合外,还使用项目继承。事实上,这些是不同的概念:

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

有些项目可能是模块的聚合,但在聚合器POM和聚合模块之间没有父子关系。(可能根本没有父子关系,或者子模块可能完全使用单独的POM作为“父模块”。在这些情况下,给出的答案将不起作用。

经过大量的阅读和实验,事实证明,有一种方法可以使用Versions Maven插件来更新聚合器POM,还可以更新所有聚合模块。这是选项。必须在聚合器项目的目录中执行以下命令:processAllModules

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

Versions Maven插件不仅会更新所有包含的模块的版本,还会更新模块间的依赖关系!!!!这是一个巨大的胜利,将节省大量时间并防止各种问题。

当然,不要忘记提交所有模块中的更改,您也可以使用相同的开关执行此操作:

mvn versions:commit -DprocessAllModules

您可以决定完全省去备份POMS,并在一个命令中完成所有操作:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false

推荐