2013-07-18 40 views
1

我有以下POM結構:Maven - 如何/爲什麼/它是否應該將父版本設置爲基於父pom中定義的屬性?

/home/projects/parent/pom.xml

<project> 
    <groupId>com.my.group</groupId> 
    <artifactId>project-super-parent</artifactId> 
    <version>${major.version}.${minor.version}</version> 
    <packaging>pom</packaging> 
    <properties> 
      <major.version>7</major.version> 
      <minor.version>5</minor.version> 
      <current.release.version>${major.version}.${minor.version}-SNAPSHOT</current.release.version> 
      ... 
    </properties> 

    .... 

</project> 

/home/projects/module1/pom.xml

<project> 
    <groupId>com.my.group</groupId> 
    <artifactId>module1</artifactId> 
    <version>${current.release.version}</version> 
    <packaging>jar</packaging> 


    <parent> 
     <groupId>com.my.group</groupId> 
     <artifactId>project-super-parent</artifactId> 
     <version>${major.version}.${minor.version}</version> 
     <relativePath>../parent</relativePath> 
    </parent> 

    ... 
</project> 

請注意,模塊不知道它的父級版本 - 它使用父級中定義的屬性,所以這是一種雞,例如克問題。

奇怪的是 - 這是有效的 - 所以當我想改變產品的主要版本時 - 我只更改一個單獨的pom文件(父文件)。

此解決方案的侷限性是我必須在文件系統上擁有所有POM文件。

我的問題是:這應該甚至工作?它究竟如何工作?當我升級到maven 3時,它可能會停止工作嗎?這是一個常用的解決方案還是濫用系統?

目前使用Maven 2.2.1和Java 7

+1

這是怎麼工作的,CAU的如果我嘗試你的父母,它會完全失敗。此外,我會建議使用Maven 3而不是Maven 2. – khmarbaise

+0

@khmarbaise它的工作原理,我不能把實際的POM放置在這裏,但它確實。 Maven 3升級在待辦事項列表:)將很快到達那裏 – RonK

回答

3

這是一種常用的解決方案或系統的濫用?

這並不常見,至少我從未見過它。 parent/pom.xml和module1/pom.xml中的版本會導致混淆。母公司有一個RELEASED版本的7.5,而模塊1有一個SNAPSHOT版本的7.5。如果已經發布7.5,則不應該開發7.5-SNAPSHOT。

避免重複的最簡單方法是在父級中維護版本只有。您可以忽略module1中的版本聲明。看看另一個項目,例如例如,maven-3源代碼。您將能夠看到該版本只在parent pom中聲明,而不是在其任何child poms中聲明。

maven-release-plugin將幫助您處理版本升級併爲您發佈它們。

0

從子pom中省略版本元素會給出錯誤。 屬性可以用在主pom中,同樣可以由pom的子集繼承。當你運行主POM時,編譯將會成功。問題是

  1. ,你不能建立孩子POM獨立
  2. 這不會傳遞依賴的情況下工作
  3. 如果升級到Maven的3未來比它會給錯誤「不可分辨的父POM

這些問題,如果它被安裝在本地存儲庫之前,我們能夠更新項目POM文件作爲構建過程的一部分來解決

相關問題