【问题标题】:Eliminate Maven POM redundancy消除 Maven POM 冗余
【发布时间】:2011-03-13 07:09:17
【问题描述】:

我有一个具有以下配置的父 POM

<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.2-SNAPSHOT</version>

从这个父 POM 继承的每个子项目都有如下配置:

<parent>
    <groupId>com.amadeus.jcp.ui.skinning.skinning-system</groupId>
    <artifactId>parent</artifactId>
    <version>1.2-SNAPSHOT</version>
</parent>

我希望所有这些项目版本号保持同步。目前,如果我将父版本更改为 1.3,那么我必须将所有子项目版本更改为 1.3。有什么办法可以避免在所有子项目中重复版本号?

我尝试用

替换上面的
<parent>
    <groupId>com.amadeus.jcp.ui.skinning.skinning-system</groupId>
    <artifactId>parent</artifactId>
</parent>

<parent>
    <groupId>com.amadeus.jcp.ui.skinning.skinning-system</groupId>
    <artifactId>parent</artifactId>
    <version>${project.version}</version>
</parent>

但这些都不起作用。我正在使用 Maven 版本 2.1.0。

谢谢, 唐

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    我尝试用 (...) 和 (...) 替换上面的内容,但这些都不起作用。我正在使用 Maven 版本 2.1.0。

    不可能。对于 Maven 2.x,您必须在子模块中声明 parent 元素,并且 parent 元素必须包含硬编码的 version(您不能省略它,也不能使用属性,请参阅 @ 987654321@ 和 MNG-624)。

    不过,Maven 3.1 将支持无版本的父元素(参见this previous answer)。

    同时,一些插件可以使维护更容易一些,例如Maven Release PluginVersions Maven Plugin 及其versions:setversions:update-child-modules 目标。

    【讨论】:

    • 谢谢 Pascal,我想我只需要等到我的公司升级到 Maven 3.1,尽管在此之前太阳很可能会燃烧殆尽。
    • @Don 不客气。 versions:set 是一个不错的解决方法,直到太阳 EOL :)
    【解决方案2】:

    您不应该在子模块中定义版本...,但您必须在父定义中给出...

    +--- root
          +--- pom.xml (Parent)
          +--- module1
                 +-- pom.xml (child 1)
    

    您还应该在您的孩子中定义一个 relativePath...

    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent</artifactId>
        <version>1.2-SNAPSHOT</version>
        <relativePath>../pom.xml</version>
    </parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    

    如果你这样做了,你永远不应该在你的父母中手动更改版本号......让发布插件完成工作,它将更改所有孩子(父母)中的版本条目...如果你真的需要改变事物有时使用maven-version-plugin...

    【讨论】:

    • 我很确定 relativePath 默认为 ../pom.xml,所以添加它不会有任何区别
    • 我没有在子模块中定义版本,我只是引用了子模块所依赖的父模块的版本。后者是我要消除的,因为它始终是父模块的当前版本。
    • "但它使事情更容易理解" 是的,但以额外配置为代价。在这种情况下,我愿意用更少的清晰度来换取更少的配置,YMMV。
    • 啊……好像是个误会……父区的版本是必须的。没有可能删除它。如果您需要更改使用发布插件或版本插件。
    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多