使用父POM对多模块项目进行Maven版本控制

时间:2012-07-13 11:14:18

标签: maven

这是前一个问题的略有不同的版本,因为我有单独的多模块和父POM:In a Maven project, how can I automatically update the version all child modules, plus the parent?

我正在尝试更新我的POM,以便从开发快照版本发布到已发布的版本号。我已经用谷歌搜索了这个问题,尝试了发布和版本插件,似乎没有什么能够处理我相当简单的设置。

根据已发布的Maven最佳实践,并且在我可以避免的情况下尝试不复制信息时,我最终得到了下面的结构,用于我的多模块项目。 共有的pom-parent.xml定义了一个版本;和B取决于A.

我发现有点令人惊讶的是标准插件无法处理看起来相当基本的设置,我错过了什么?

我提出的所有解决方法都没有完全令人满意:

  • 将产品版本定义为属性有点不稳定,由于用户settings.xml或其他技巧,相同的模块源可能会得到不同的版本

  • 合并根pom.xml和pom-parent.xml,并将我当前在根pom中维护的产品范围的构建步骤移动到专用模块中;并希望std插件能够正常工作......没试过。

有什么建议吗?

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>

1 个答案:

答案 0 :(得分: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