我有一个多模块的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>
我鼓励您阅读有关多模块(反应堆)构建的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>
这是一个更好的链接。
给出的答案假设所讨论的项目除了模块聚合之外还使用了项目继承。事实上,这是两个截然不同的概念:
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
有些项目可能是模块的聚合,但聚合器POM和聚合模块之间没有父子关系。(可能根本没有父子关系,或者子模块可能完全使用一个单独的POM作为“父”。)在这些情况下,给出的答案是行不通的。
经过大量的阅读和实验,我们发现有一种方法可以使用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
上面给出的解决方案在很长一段时间内都适用于我们:
mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
然而,昨天它停止工作了,我们发现它是由于最近在版本maven插件中的一个错误
我们(临时)的解决方法是修改父/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>
+