消除Maven POM冗余

时间:2010-07-08 11:35:52

标签: java maven-2

我有一个带有以下配置的父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版。

谢谢, 唐

2 个答案:

答案 0 :(得分:3)

  

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

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

但是,Maven 3.1将支持无版本的父元素(请参阅this previous answer)。

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

答案 1 :(得分:0)

你不应该在子模块中定义一个版本...但你必须在父定义中给出...

+--- 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>

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