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

| 我有一个多模块的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>
已邀请:
使用来自versions-maven插件的
versions:set
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
它将调整多模块项目中的所有pom版本,父版本和依赖版本。 如果您输入有误,请执行
mvn versions:revert
之后,或
mvn versions:commit
如果您对结果感到满意。 注意:此解决方案假定所有模块也将聚合pom用作父pom,在此答案被认为是标准的情况下。如果不是这种情况,请寻求Garret Wilson的回答。
给定的答案假设所讨论的项目除模块聚合外还使用项目继承。实际上,这些是不同的概念: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation 一些项目可能是模块的聚合,但在聚合器POM和聚合的模块之间没有父子关系。 (可能根本没有父子关系,或者子模块可以将单独的POM一起用作\“ parent \”。)在这些情况下,给定的答案将不起作用。 经过大量阅读和试验,事实证明,有一种方法可以使用Versions Maven插件不仅更新聚合器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
您可能需要研究Maven版本插件的release:update-versions目标。它将更新父级的版本及其下的所有模块。 更新:请注意,以上是发布插件。如果您不释放,则可能要使用
versions:set
mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
如果您要完全自动化该过程(即您想增加版本号而不必知道当前版本号是什么),则可以执行以下操作:
mvn build-helper:parse-version versions:set -DnewVersion=\\${parsedVersion.majorVersion}.\\${parsedVersion.minorVersion}.\\${parsedVersion.nextIncrementalVersion} versions:commit
我鼓励您阅读有关多模块(反应堆)构建的Maven书。 我特别要指出以下几点:
<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>
这是一个更好的链接。
versions:update-child-modules
听起来像您要找的东西。您可以按照上面提到的方法进行versions:set,但这是更新父版本号的轻量级方法。对于子模块,我认为应该删除
<version>
定义,因为它们将继承父模块的版本号。
最好的方法是,由于您打算将模块捆绑在一起,因此可以在
<project>
标签正下方的最外面的
pom.xml
(父模块)中指定
<dependencyManagement>
标签。它控制版本和组名。在您自己的模块中,只需在
pom.xml
中指定
<artifactId>
标记。它将从父文件中获取版本。
最简单的方法是将每个pom.xml中的版本更改为任意版本。然后检查依赖性管理以使用此模块中使用的模块的正确版本!例如,如果您要增加拖曳模块项目的版本控制,则必须像下面这样: 在childe模块中:
    <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>

要回复问题请先登录注册