我有一个多模块的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>

当前回答

使用version -maven插件中的版本:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

它将调整多模块项目中的所有pom版本、父版本和依赖版本。

如果你犯了错误,那就去做

mvn versions:revert

之后,或

mvn versions:commit

如果你对结果满意的话。


注意:这个解决方案假设所有模块都使用聚合pom作为父pom,在回答这个问题时,这个场景被认为是标准的。如果情况并非如此,那就听听加勒特·威尔逊的回答吧。

其他回答

版本:update-child-modules听起来像是您正在寻找的。您可以像前面提到的那样执行versions:set,但这是更新父版本号的一种轻量级方式。对于子模块,我认为应该删除<version>定义,因为它们将继承父模块的版本号。

我在找这个:

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

如果你想完全自动化这个过程(即你想增加版本号,而不需要知道当前版本号是什么),你可以这样做:

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>

这是一个更好的链接。

最好的方法是,既然你打算把你的模块捆绑在一起,你可以在最外层的pom.xml(父模块)中直接在<project>标签下指定<dependencyManagement>标签。它控制版本和组名。在您的单独模块中,您只需要在pom.xml中指定<artifactId>标记。它将从父文件中获取版本。