2011-04-20 151 views
200

我有一个多模块maven项目。我们打算将所有这些模块一起版本化。但截至目前,我结束了在每个模块的pom.xml的硬编码版本如下更新多模块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> 
<groupId>com.xyz</groupId> 
<artifactId>xyz-application</artifactId> 
<version>2.50.0.g</version> 
<packaging>pom</packaging> 
+0

你的问题是错误的,并混淆有真正的多模块(“聚合”)POMs的人。从你的例子和答案看来,你实际上是在讨论一个父POM,而不是一个多模块的聚合POM。请参阅https://maven.apache.org/pom.html#Aggregation。 – 2016-12-16 17:05:00

回答

387

使用versions:setversions-maven plugin

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT 

将调整所有POM版本,父版本和依赖性的版本在多模块项目。

如果你犯了一个错误,做

mvn versions:revert 

之后,或

mvn versions:commit 

如果你满意的结果。

+0

谢谢...在一个示例中尝试过它,它的工作原理: - )...将在我的构建环境中尝试它。 – sandeepkunkunuru 2011-04-20 08:32:05

+4

如果有一种解决方案不需要您真正更改每个模块,那就太好了。我能想到的唯一选择是始终为父-Pom使用快照版本。 – AmanicA 2011-07-02 21:49:10

+33

除了'versions:set'之外,还可以指定'-DgenerateBackupPoms = false',因为默认情况下该插件备份原始pom文件。 – 2012-11-15 08:49:05

19

您可能希望查看Maven发布插件的release:update-versions目标。它将更新父级版本以及它下面的所有模块。


更新:请注意,以上是发布插件。如果你不释放,你可能需要使用versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT 
+0

mvn版本:set不影响模块。 – 2017-09-12 12:52:55

+0

它呢,我使用它。 [设置当前项目的版本,并基于该变化传播这种变化到任何子模块是必要的。(http://www.mojohaus.org/versions-maven-plugin/set-mojo.html) – Nishant 2017-09-13 17:53:58

+0

确定它何时反应堆构建是在同一时间的父母。这是令人困惑的结构看起来不然... – 2017-09-14 07:01:57

11

我鼓励您阅读Maven Book about multi-module(反应堆)构建。

我的意思,尤其是以下几点:

<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> 

is a better link

+8

并寻找具体的什么? – 2013-01-03 15:56:11

+2

+ 1为'pom.xml'文件提出了正确的格式,但我同意(与@ThorbjørnRavnAndersen)一起阅读整本书的信息是矫枉过正的。 :p – 2016-01-27 09:09:40

+5

不幸的是,从父项继承版本信息不会消除必须修改项目中的所有pom文件**的负担 - 因为它们都通过*版本号引用父项。 – 2016-08-05 21:41:47

4

版本:更新子模块听起来像你在找什么。你可以做的版本:设置如上所述,但这是一个轻量级的方式来更新父版本号。对于子模块,我认为您应该删除<version>定义,因为它们将继承父模块的版本号。

1

最好的办法是,既然你打算捆绑你的模块组合在一起,可以外最pom.xml(父模块)在指定<dependencyManagement>标签下<project>标签指引。它控制版本和组名称。在您的个人模块中,您只需在pom.xml中指定<artifactId>标签即可。它将采用父文件的版本。

+0

我无法在[pom上找到标签dependencyManagement .XML](http://maven.apache.org/pom.html)。你在想[其他](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management)? – 2014-09-03 17:58:59