我有一个多模块的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>
12条答案
按热度按时间rks48beu1#
使用versions-maven plugin中的
versions:set
:它将调整多模块项目中的所有POM版本、父版本和依赖版本。
如果你犯了错误,那就去做
之后,或
如果你对结果满意的话。
注意:此解决方案假定所有模块也使用聚合POM作为父POM,这一场景在回答本问题时被认为是标准方案。如果不是这样,请使用Garret Wilson's answer。
62lalag42#
给定的答案假设所讨论的项目除了模块聚合之外还使用项目继承。事实上,这些都是截然不同的概念:
Https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation
一些项目可能是模块的聚合,但在聚合器POM和聚合模块之间没有父子关系。(可能根本没有父子关系,或者说子模块可能完全使用单独的POM作为“父”。)在这些情况下,给定的答案将不起作用。
经过大量阅读和实验,发现有一种方法可以使用Versions Maven Plugin不仅更新聚合器POM,还可以更新所有聚合模块;这就是
processAllModules
选项。以下命令必须在Aggregator项目的目录中执行:Versions Maven插件不仅将更新所有包含的模块的版本,还将更新模块间的依赖关系!这是一个巨大的胜利,将节省大量时间,并防止各种问题。
当然,不要忘记提交所有模块中的更改,您也可以使用相同的开关来执行此操作:
您可以决定完全省去备份POMS,只需一个命令即可完成所有操作:
c0vxltue3#
如果您想要完全自动化该过程(即,您想要递增版本号,而不必知道当前的版本号是什么),您可以这样做:
0kjbasz64#
你可能想看看Maven发布插件的release:update-versions目标。它将更新父模块的版本以及其下的所有模块。
更新:请注意,以上是发布插件。如果您没有发布,则可能需要使用
versions:set
wnvonmuf5#
我建议您阅读Maven Book about multi-module(React堆)的构建。
我指的是以下几点:
应该改成。这里只关注未定义的版本,它只在父部件中定义。
此is a better link。
0sgqnhkj6#
最好的方法是,因为您打算将模块捆绑在一起,所以可以在
<project>
标记下面的最外层的pom.xml
(父模块)中指定<dependencyManagement>
标记。它控制版本和组名。在您的单个模块中,您只需要在pom.xml
中指定<artifactId>
标记。它将从父文件中获取版本。j9per5c47#
versions:update-child-modules
听起来就是你要找的。您可以按照前面提到的那样设置版本,但这是更新父版本号的一种轻量级方式。对于子模块,我认为应该删除<version>
定义,因为它们将继承父模块的版本号。amrnrhlw8#
上面给出的解决方案worked for us也很长一段时间:
然而,昨天它停止工作了,我们发现它是由于a recent bug in a the versions-maven-plugin
我们的(临时)workaround was to change the parent/pom.xml文件如下:
q35jwt9p9#
更新子模块上的主pom.xml和父版本:
gdx19jrr10#
最简单的方法是将每个pom.xml中的版本更改为任意版本。然后检查依赖项管理以使用此模块中使用的正确模块版本!例如,如果您想要增加两个模块项目的版本化,您必须像Flow一样:
在Childe模块中:
在父模块中:
wqlqzqxt11#
我在找这个:
lymnna7112#
提示:
例如,如果您的多模块maven项目使用项目版本作为主POM文件中的属性
在这种情况下,您可以使用
set-property
而不是set
来升级项目版本:示例: