2013-06-21 90 views
2

我正在嘗試將我們的存儲庫從SVN遷移到Git,並且在一個非常大的項目上遇到了release插件問題。Maven-Release-Plugin:強制使用scm提供程序的特定版本

問題:

大約有50多個子模塊,這個項目並嘗試添加所有的修改勁歌作爲一個「git的補充 - 」。這打破了Windows命令行限制。

幸運的是,在maven-scm-provider-gitexe的1.8.1版本中已經修復了這個問題,但是maven-release-plugin目前被設置爲使用1.7版本,但沒有修復。

我已經嘗試將以下內容添加到我的根目錄pom.xml中,但在mvn發行版中我仍然可以看到它下載1.7:準備並在詳細模式下運行該進程並不表示它正在使用1.8.1。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
    <executions> 
     <execution> 
     <id>default</id> 
     <goals> 
      <goal>perform</goal> 
     </goals> 
     <configuration> 
      <pomFileName>subproj/pom.xml</pomFileName> 
     </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
     <groupId>org.apache.maven.scm</groupId> 
     <artifactId>maven-scm-api</artifactId> 
     <version>1.8.1</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.maven.scm</groupId> 
     <artifactId>maven-scm-provider-gitexe</artifactId> 
     <version>1.8.1</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

我也嘗試在pom.xml中添加以下內容,以便強制它使用正確的版本而沒有更多的運氣。

<extensions> 
    <extension> 
     <groupId>org.apache.maven.scm</groupId> 
     <artifactId>maven-scm-provider-gitexe</artifactId> 
     <version>1.8.1</version> 
    </extension> 
</extensions>  

我懷疑它是不是使用1.8.1的原因是,它仍然沒有試圖做一個git的所有POM文件添加,而我已經檢查了插件的源代碼,這肯定看起來像它應該被加入每個文件單獨爲Windows(我甚至仔細檢查codehaus plexus Os.isFamily(Os.FAMILY_WINDOWS),以確保在我的機器上返回true。

我缺少什麼?如何強制發佈插件使用正確的版本的SCM插件?

+0

爲什麼要轉到GIT? (除了,*很酷*)?只是想知道,因爲SVN沒什麼問題。 – vikingsteve

+0

首先,我會建議使用最新版本的maven-release-plugin,因爲當前版本是2.4.1。除此之外,您在發佈週期中收到了哪些錯誤消息? – khmarbaise

+0

我已經試過2.4.1,沒有更多的運氣。我使用2.3.2,因爲發佈插件頁面建議如果你使用Git(儘管它沒有指定爲什麼)。 – Wysawyg

回答

1

愚蠢的問題,但你有沒有想過移動所有這些子模塊在他們的自己的git項目?並分別發佈它們?

+0

這根本不是一個愚蠢的建議。我本來會推薦它的。 – carlspring

+0

問題是,我們想要做的一部分是從根釋放,以便一切都得到版本。否則,我們需要花費大量的時間來更新相互依賴的鏈接,而發佈插件會爲您提供幫助。 – Wysawyg

4

根據maven發佈插件2.4.1更新日誌http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144&version=19050,由於'git status --porcelain'的錯誤,在此版本中SCM已經回落到1.7。

  • 所以你應該嘗試2.4版本。它應該工作,也許你不會影響到這個bug。
  • 或等待未來的版本...

編輯: 該錯誤是與此相關的SCM錯誤:http://jira.codehaus.org/browse/SCM-686

註釋說,使用maven-scm-provider-gitexemaven-scm-provider-git-commons作爲依賴

<dependencies> 
    <dependency> 
     <groupId>org.apache.maven.scm</groupId> 
     <artifactId>maven-scm-provider-gitexe</artifactId> 
     <version>1.8.1</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.maven.scm</groupId> 
    <artifactId>maven-scm-provider-git-commons</artifactId> 
    <version>1.8.1</version> 
    </dependency>  
</dependencies> 
+0

+1:或者......貢獻一個補丁,以便2.4.2版本可以修復它。 :) – carlspring

+0

我添加了相關的SCM錯誤。如果你添加maven-scm-provider-git-commons,它是否工作? – willome

+1

我試過添加這些。 2.4不起作用,因爲它使用了maven-scm-provider-1.8的1.8版本,我正在尋找的特定修補程序在1.8.1中。這個:https://jira.codehaus.org/browse/SCM-697。授予你最有幫助的答案的賞金。我想我只能等待。 – Wysawyg

0

按照Aurelien的建議,將子項目提取到單獨的模塊中。遵循這個原則將使你的生活變得更簡單。爲了發佈,您不必發佈沒有更改的模塊。此外,構建時間將被減少。如果你看看Github上託管的大多數Java項目,你會發現許多人已經將他們的每個模塊提取到單獨的項目中。 Git主要用於處理較小的存儲庫。

您可以提取子目錄像這樣的歷史:

git remote rm origin 
git filter-branch --subdirectory-filter ${project} HEAD 
git remote add origin [email protected]:path/to/${project}.git 
git branch --set-upstream master origin/master 
git push 

不是你要找的人,我相信答案的國王,但我認爲這可以幫助你在正確的道路上,如果你不移動這樣的所有項目,至少它會縮短你的列表,並可能幫助你解決問題。

相關問題