2012-07-13 114 views
3

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

我试图更新我的POM去从开发快照版本到发布版本号。我将这个问题用Google搜索了一遍,尝试了版本和版本插件,但似乎没有任何东西能够处理我相当简单的设置。

下面发布了Maven最佳实践,并且在我可以避免的时候尽量不要复制信息,所以我最终得到了我的多模块项目的结构。 有一个由公共pom-parent.xml定义的单一版本;和B取决于A.

我觉得有点令人惊讶的是,标准插件无法处理似乎是一个相当基本的设置,我错过了什么?

我想出了变通办法中没有一个是完全令人满意:

  • 定义产品版本为一个属性是有点片状,在同一个模块的源可以得到,因为一个用户设置不同的版本。 xml或其他技巧

  • 合并根目录pom.xml和pom-parent.xml并将目前在根目录中保留的产品范围构建步骤移到专用模块中;并希望标准插件将工作...没有尝试过。

有什么建议吗?

根/ POM-parent.xml:下面

<project...> 
    <groupId>acme</groupId> 
    <artifactId>ParentPom</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

根/ 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> 

root/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> 

root/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> 

回答

5

如果你有一个像下面这样的结构:用root其父这样

root 
+-- pom.xml (1.0-SNAPSHOT) 
! 
+-- module1 
!  +-- pom.xml (1.0-SNAPSHOT) 
+-- module2 
     +-- pom.xml (1.0-SNAPSHOT) 

所有模块(模块和模块2):

<parent> 
    <groupId>xxx</groupId> 
    <artifactId>xxx</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

如果要因素为其他项目提供其他默认设置,如pluginManagement或dependencyManagement,以及您必须使用单独的父pom,该pom必须是单独的maven项目,其中只包含pom.xml。此外,该项目将分开部署和发布。如果你这样做,你可以在上面的结构的根目录中使用它作为父项。

如果您想发布一个版本,您只需进入上述结构的根文件夹,版本号等会自动递增。

mvn -B release:prepare release:perform 
+0

我已经分析了“其他默认设置”,这不需要单独的项目,我只需要一个pom-parent.xml。当在该父POM中定义版本时,发布插件将不起作用,这是我避免在每个模块中复制的方式。 – franck102 2012-07-13 13:59:29

+0

你说的是一个pom-parent.xml,这是我提到的root/pom.xml没有的。另一个公司的pom必须是一个单独的项目,将其用作root/pom.xml中的父项。该版本在父pom(root/pom.xml)中仅定义一次,并在父引用中的模块中使用。 – khmarbaise 2012-07-13 14:16:13

+0

我想我明白你的建议,相当于“将产品范围的构建步骤转移到单独的模块”,正如我最初提到的那样,不是吗?因为这些步骤不能在root/pom.xml中生存,如果那个pom是每个模块pom的父亲......也许这是正确的做法,我会试试看 - 谢谢! – franck102 2012-08-03 17:07:03