<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 楼
使用来自versions-maven插件的versions:set
:mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
它将调整多模块项目中的所有pom版本,父版本和依赖版本。
如果输入有误,请执行
mvn versions:revert
之后,或者
mvn versions:commit
对结果感到满意。
注意:此解决方案假定所有模块也将聚合pom用作父pom,在回答此问题时,该方案被视为标准方案。如果不是这种情况,请寻求Garret Wilson的回答。
评论
如果有不需要您实际更改每个模块的解决方案,那将是很好的。我能想到的唯一替代方法是始终为父pom使用快照版本。
– AmanicA
2011年7月2日在21:49
除了版本号:set外,还可以指定-DgenerateBackupPoms = false,因为默认情况下,此插件备份原始pom文件。
–Maksim Sorokin
2012年11月15日在8:49
这就是版本的意义:提交:“删除pom的初始备份,从而接受更改。”
–迈克尔·拉法格(Michael Laffargue)
2014年4月28日在9:52
一个新的插件以不同的方式解决了此问题中描述的问题:mojo.codehaus.org/flatten-maven-plugin/examples/…
–史蒂芬(Stephan)
2014年6月12日14:51
@MichaelLaffargue mvn版本:提交似乎删除了先前pom.xml生成的备份文件
–克里斯·罗克韦尔(Cris Rockwell)
15年8月30日在17:39
#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
评论
我们如何像build-helper插件一样自动化下一个版本?
–lostintranslation
18-09-14在6:52
使用Maven 3.5.0,我无法使它正常工作。我有项目汇总,只有父pom得到更新。我还尝试了项目继承(以及聚合-提供的链接中的“所有三个规则”),并且再次仅更新了父pom。
–SiKing
19年5月17日在18:24
找到了秘密的make-it-work开关:父pom的起始版本和模块必须相同!我的父pom以“ 1-SNAPSHOT”开头,模块的内容为“ 1.0.0-SNAPSHOT”。 :)
–SiKing
19年5月17日在19:13
对于聚合器项目,聚合器的版本和子模块的版本不必相同。 (例如,您的聚合器pom更改很少,可以保持特定版本,而各个子模块可以具有自己的发布周期)。指定给版本:set插件的关键属性是-DoldVersion ='*',在mojohaus.org/versions-maven-plugin/set-mojo.html上,它明确表示应在处理聚合器项目时指定此属性。
–马修·怀斯(Matthew Wise)
19年5月23日在16:08
-DprocessAllModules在什么条件下实际起作用?它对我不起作用。
– Alex R
19年6月23日在17:59
#3 楼
如果要完全自动化该过程(即,您想增加版本号而不必知道当前版本号是什么),则可以执行以下操作:mvn build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
评论
谢谢,@疯狂,你救了我的一天
–马克西姆·科斯特罗姆(Maksim Kostromin)
19年1月30日在17:52
mojohaus.org/build-helper-maven-plugin/parse-version-mojo.html
– Se Song
19年2月1日在2:44
或者您可以使用-DoldVersion ='*'
–马修·怀斯(Matthew Wise)
19年5月23日在16:09
太好了,谢谢! SNAPSHOT的示例:mvn build-helper:parse-version版本:set -DnewVersion = \ $ {parsedVersion.majorVersion}。\ $ {parsedVersion.minorVersion}。\ $ {parsedVersion.nextIncrementalVersion} -SNAPSHOT版本:commit
–oikonomopo
20-10-22在15:15
#4 楼
您可能需要研究Maven版本插件的release:update-versions目标。它将更新父版本及其下的所有模块。更新:请注意,以上是发布插件。如果不释放,则可能要使用
versions:set
mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
评论
mvn version:set不会影响模块。
– 9ilsdx 9rvj 0lo
17年9月12日在12:52
是的,我用它。设置当前项目的版本,并根据更改将更改传播到必要的任何子模块上。
– Nishant
17年9月13日在17:53
可以,当反应堆同时位于父级时,它会执行。当结构看起来不对时会令人困惑...
– 9ilsdx 9rvj 0lo
17年9月14日在7:01
mvn release:update-versions -DautoVersionSubmodules对我来说效果很好,即使我没有发布:-)
–msa
20年3月2日在15:06
#5 楼
我鼓励您阅读有关多模块(反应堆)构建的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>
这是一个更好的链接。
评论
并具体寻找什么?
–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
2013年1月3日15:56
+1可以显示pom.xml文件的正确格式,但是我同意(与@ThorbjørnRavnAndersen一起使用)阅读整本书以获取足够的信息是过分的。 :p
– Priidu Neemre
16 Jan 27'9:09
不幸的是,从父级继承版本信息并没有消除必须修改项目中所有pom文件的负担-因为它们都通过版本号引用了父级。
–轻松逗乐的史蒂芬
16年8月5日在21:41
您可以使用versions-maven-plugin处理所有这些事情,也可以使用maven-release-plugin,因此不需要手动处理...
–khmarbaise
16年8月6日在9:45
#6 楼
versions:update-child-modules
听起来像您想要的东西。您可以按照上面提到的方法进行versions:set,但这是更新父版本号的轻量级方法。对于子模块,我认为您应该删除<version>
定义,因为它们将继承父模块的版本号。#7 楼
最好的方法是,由于您打算将模块捆绑在一起,因此可以直接在<dependencyManagement>
标签下面的最外面的pom.xml
(父模块)中指定<project>
标签。它控制版本和组名。在您自己的模块中,只需在<artifactId>
中指定pom.xml
标签。它将从父文件获取版本。评论
我在pom.xml中找不到标签DependencyManagement。你在想别的吗?
– Arturo Tena
2014年9月3日于17:58
#8 楼
上面给出的解决方案也很长时间对我们有用:mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
但是它昨天停止了工作,由于在版本-maven-plugin中的最新错误,我们发现了它
我们的(临时)解决方法是按如下方式更改parent / 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>
+
#9 楼
最简单的方法是将每个pom.xml中的版本更改为任意版本。然后检查依赖性管理以使用此模块中使用的模块的正确版本!例如,如果您要增加拖车模块项目的版本控制,则必须像在子模块中进行以下操作::
<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>
#10 楼
要在子模块上更新主要pom.xml和父版本: mvn versions:set -DnewVersion=1.3.0-SNAPSHOT -N versions:update-child-modules -DgenerateBackupPoms=false
#11 楼
我一直在寻找:<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
评论
您的问题被遗漏了,并使拥有真正的多模块(“聚合”)POM的人感到困惑。从示例和答案看来,您实际上是在谈论父POM,而不是多模块的聚合POM。请参阅maven.apache.org/pom.html#Aggregation。