这是与上一个问题略有不同的版本,因为我有单独的多模块和父 POM: 在 Maven 项目中,如何自动更新所有子模块以及父模块的版本?
我正在尝试更新我的 POM,从开发快照版本变为已发布版本号。我已经用谷歌搜索了这个问题,尝试了发布和版本插件,但似乎没有什么能够处理我相当简单的设置。
遵循已发布的 Maven 最佳实践,并在可以避免的情况下尽量不重复信息,最终为我的多模块项目提供了以下结构。 有一个由公共 pom-parent.xml 定义的单一版本; B 取决于 A。
令我感到有点惊讶的是,标准插件无法处理看似相当基本的设置,我是否遗漏了一些东西?
我想出的解决方法都不是完全令人满意的:
将产品版本定义为属性有点不稳定,由于用户settings.xml或其他技巧,相同的模块源可能会获得不同的版本
合并根pom.xml和pom-parent.xml,并将我当前在根pom中维护的产品范围构建步骤移动到专用模块中;并希望标准插件能够正常工作...没有尝试过。
有什么建议吗?
root/pom-parent.xml:下面所有 POM 的父级
<project...>
<groupId>acme</groupId>
<artifactId>ParentPom</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
root/pom.xml:以 A 和 B 作为子模块的多模块项目
<project ...>
<parent>
<groupId>acme</groupId>
<artifactId>ParentPom</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>acme</groupId>
<artifactId>Product</artifactId>
<packaging>pom</packaging>
<modules>
<module>A</module>
<module>B</module>
</modules>
根/A/pom.xml:
<project ...>
<parent>
<groupId>acme</groupId>
<artifactId>ParentPom</artifactId>
<relativePath>../parent-pom.xml</relativePath>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>acme</groupId>
<artifactId>A</artifactId>
<packaging>jar</packaging>
根/B/pom.xml:
<project ...>
<parent>
<groupId>acme</groupId>
<artifactId>ParentPom</artifactId>
<relativePath>../parent-pom.xml</relativePath>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>acme</groupId>
<artifactId>B</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>acme</groupId>
<artifactId>A</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
如果您有如下结构:
root
+-- pom.xml (1.0-SNAPSHOT)
!
+-- module1
! +-- pom.xml (1.0-SNAPSHOT)
+-- module2
+-- pom.xml (1.0-SNAPSHOT)
所有模块(module1 和 module2)都使用 root 作为其父模块,如下所示:
<parent>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
如果您还想为其他项目分解其他默认设置,例如pluginManagement或dependencyManagement,您必须使用单独的父pom,它必须是一个单独的maven项目,仅包含pom.xml。此外,该项目将单独部署和发布。如果这样做,您可以在上述结构的根 pom 中使用它作为父级。
如果您想发布版本,您只需进入上述结构的根文件夹,版本号等将自动递增。
mvn -B release:prepare release:perform