2012-10-30 27 views
6

我們在SVN中使用定義公共配置的父級(非聚合器)項目的以下項目結構。父母是單獨管理和發佈的。相對於父代的Maven SCM URL

trunk 
    +parent 
     pom.xml 
    +project1 
     pom.xml 
     +project1_1 
      pom.xml 
     +project1_2 
      pom.xml 
    +project2 
     pom.xml 

因此,基本上每個實際項目(project1,project2)都被用作其子項目的聚合器。通用配置設置(Java編譯器版本,其他插件)保存在父項中,用作所有項目(project1,project2)中的Maven parent

我想在父項中定義的其中一個設置是Subversion的SCM URL,例如,在父pom.xml中的http://svnhost/base/trunk/parent

當我這樣做時,單個項目會繼承此設置,但當然不會反映路徑的相對性質。在項目1,這是解決http://svnhost/base/trunk/parent/ - 我檢查了這與mvn help:effective-pom

有沒有一種方法可以指定SCM連接,以便相對於父級進行解析?還是必須在每個單獨的項目中提供SCM URL?

回答

3

如果您使用像${svn.host}和​​這樣的屬性來構建scm.url應該是可能的。發佈插件有一個錯誤,其中的屬性在發佈版本中被替換爲:http://jira.codehaus.org/browse/MRELEASE-128,但從2.3版本開始似乎已修復。所以你的孩子poms只定義了屬性,但不再是scm url。

我不知道這是否有幫助。您不會在pom.xml中保存太多行,並且您會介紹危險的人員不會更改屬性。

如果定義在父parent.scm.url的屬性,然後使用在兒童屬性的添加相對URL(<scm.url>${parent.scm.url}/../myproject</scm.url>) 如果您在scm.url基於該屬性你還是相對路徑不要保存很多配置?

我認爲你確實想要你需要編寫一個讀取父url的插件,然後從當前工作副本讀取url(因爲maven不知道在哪裏找到該項目url,因爲它沒有配置),然後計算它的相對路徑。我認爲這很奇怪,而不是在每個pom中重複scm.url配置。

+0

謝謝 - 這些也是我的發現。我想我會簡單地在每個頂級聚合器項目中定義SCM URL(在我的示例中爲project1,project2),因爲我不會從使用變量中獲益太多。 – nwinkler

2

在多模塊構建中,您只需要在項目的根級定義scm連接。但是你的項目佈局看起來並不像一個正確的設置。你爲什麼不把你的父母/ pom.xml直接放在中繼文件夾下?如果你需要分開釋放父母,這表明父母真的是一個獨立的在線Maven項目。

+0

那麼,父母是一個獨立的項目,應該爲所有其他項目保存通用設置。每個頂級項目(在我的例子中爲project1,project2)都作爲其模塊的聚合器。看起來我必須在每個頂級項目中指定SCM URL,而我可以在中央父POM中保留其他設置(例如要部署到的Maven回購)。 – nwinkler

+0

我認爲,如果你將你的項目移動到SVN的父文件夾中,但不要將它們作爲模塊添加到根目錄下,唯一的問題是當你釋放父目錄時你將所有項目添加到創建的標籤。但是你描述的方式更加「麻煩」 - 我會用那個。 – wemu