2010-09-10 23 views
4

我想這是有點明顯,但我仍然判斷其爲一個缺點...Maven的版本:準備覆蓋SCM性能與解析值

我有23個Maven化項目。我現在添加<scm>位,因爲我已經開始使用發佈插件。這是我的思維過程:

  • 我只在我公司基地 POM添加<SCM>部分,並用參數化的特性,例如網址
<scm> 
    <connection>${scmBaseConnection}/${scm.module}/${scm.edition}</connection> 
    <developerConnection>${scmBaseConnection}/${scm.module}/${scm.edition}</developerConnection> 
    <url>${fisheyeBaseUrl}/${scm.module}</url> 
</scm> 
  • 然後,每個項目的根(聚合)POM僅需聲明其SCM。<properties>因此(而不必重新申報整個<SCM>部分),例如:
<scm.module>sharktopus</scm.module> 
    <scm.edition>trunk</scm.edition> 

但我很快意識到,我不能這樣做:發佈插件重寫標籤下一個版本的SCM信息,每個POM所以每個這樣的POM需要它自己 <SCM>部分。

精細,所以我決定,我會存儲在基地POM性質的公共SCM的詳細信息,並有每個項目的根POM申報使用這些道具的<SCM>部分,再加上其自身的具體情況,例如:

<scm> 
    <connection>${scmBaseConnection}/sharktopus/trunk</connection> 
    <developerConnection>${scmBaseConnection}/sharktopus/trunk</developerConnection> 
    <url>${fisheyeBaseUrl}/sharktopus</url> 
</scm> 

但是這也不起作用,因爲發佈插件重寫使用已解決的值(事後看來這很明顯)。所以,例如對於釋放標籤 POM,上面的信息會被改寫爲:

<scm> 
    <connection>scm:svn:https://mysvnhost.net/sharktopus/tags/R1_NewStuff</connection> 
    <developerConnection>scm:svn:https://mysvnhost.net/sharktopus/tags/R1_NewStuff</developerConnection> 
    <url>https://mysvnhost.net/sharktopus</url> 
</scm> 

這意味着每個POM必須有它自己的 <SCM>部分與硬編碼的網址

  • 這是每個人都做的嗎?
  • 如果您的SCM網址發生變化會發生什麼情況 - 您是否只搜索/替換所有項目?
  • 它可能是發佈插件重寫部分URL的功能請求,例如保留屬性引用,但覆蓋「最終」細節?

回答

3

定義scm零件的唯一地方是在項目根目錄下不是公司根目錄。在多模塊構建中,只需要一個scm部分。發佈插件將替換屬性的原因非常簡單。發佈後,這些pom必須代表該軟件的狀態。如果他們有屬性將是不可能的保證corret值等所以結果將不可重現... 如果SCM URL更改它將只對新項目有效,而不是舊項目,因爲他們是已經部署等。

+0

嗯,是的,我想你是對的... – 2010-09-10 14:38:18

2

謝謝。現在我明白重寫SCM信息的原因。

然而,構建系統/過程,我們使用需要與用戶名SVN的URL包括:

scm:svn:svn+ssh://[email protected]/svn/repo/project/path/trunk/ 

該用戶名是爲每個用戶不同,當然,構建系統用戶。我試圖通過參數化用戶名嘗試類似於上述內容。

svn+ssh://${svn-user}@svn.company.com/svn .... 

但是,前面被發現時,SCM信息被髮布插件覆蓋,使用最新的用戶名來代替參數。

svn+ssh://[email protected]/svn ... 

我明白釋放插件必須如何保持標籤發行版本的軟件的狀態,但它需要在軀幹或頭部版本的POM來維持呢?

+0

我也想做到這一點。我無法找到任何其他方式來允許憑據,所以我不得不以交互方式輸入它們。這造成了令人沮喪的構建過程。 – Lucas 2011-03-15 21:28:00