使用父 POM 的多模块项目的 Maven 版本控制

问题描述 投票:0回答:1

这是与上一个问题略有不同的版本,因为我有单独的多模块和父 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>
maven
1个回答
5
投票

如果您有如下结构:

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
© www.soinside.com 2019 - 2024. All rights reserved.