2010-07-08 156 views
4

我有以下配置消除Maven的POM冗余

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

每个孩子的项目,从这个父POM继承父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。

谢谢, 唐

回答

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目标。

+0

感谢Pascal,我想我只能等到我的公司升级到Maven 3.1时,尽管在发生这种情况之前太阳可能会被烧毁。 – 2010-07-08 14:26:31

+0

@不客气。 '版本:设置'是一个体面的解决方法,直到太阳EOL :) – 2010-07-08 15:19:04

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> 

如果你这样做,你不应该在你的父母手动更改版本号......让释放插件做T他的工作也将改变所有孩子的版本条目(父母)appropietaley ......如果你真的需要改变的东西有时使用maven-version-plugin ...

+1

我很确定relativePath默认为'../ pom.xml',所以添加这个不会有什么区别 – 2010-07-08 12:02:26

+0

但是它让事情变得更加清晰。 – khmarbaise 2010-07-08 12:09:48

+1

我没有在子模块中定义的版本,我只是引用了孩子依赖的父模块的版本。后者是我想要消除的,因为它总是无论当前版本的父模块是什么。 – 2010-07-08 12:10:51