2013-05-31 43 views
5

我有Maven多模塊項目,我想使用腳本將開發版本更新爲給定值。聚合器POM只是一個聚合器,而子代不會從中繼承。這很重要,因爲這些工件都從其他POM文件繼承而來。這裏是我的結構更新Maven多模塊項目中的版本

aggregator/ 
--projectA 
--projectB 

此外,projectBprojectA Maven的依賴。

首先我想:

mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set 

只更新了aggregator項目的版本。

如果我運行Maven發佈過程,它會正確更新projectBprojectA的依賴關係,以便在發佈版本之後使用新的開發版本。由於發佈過程處理得很好,我認爲使用發佈插件可能會解決我的問題。

所以我試過如下:

mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions 

這正確地更新所有的子項目。但它並沒有更新projectB的依賴版本projectA

什麼是更新我項目中所有開發版本的簡單方法,包括projectBprojectA的依賴?

回答

6

你可能有更多的運氣the release plugin,但它可能需要一些調整

versions:set旨在更新其執行對...即反應器的根POM的版本。

如果你遵循它的約定,那麼它會工作......但你需要知道它的約定。

當你有/project/parent/version/project/version都規定,但「不小心」在相同的值,該版本的插件假設兩個版本都只是偶然相同,所以不更新子項目的版本時,父版本正在更新。 updateMatchingVersions告訴插件假設它不是一個意外,並且該孩子應該鎖定步驟。

如果您只指定/project/parent/version並且未指定項目版本,因此依靠繼承,插件會將子項目添加到版本更改列表(並因此再次遍歷所有項目以確保其捕獲任何其他必需的項目更改)

版本插件目前不提供強制所有內容到一個版本的選項......雖然這可能是一個好主意。

你可以得到你想要有三個命令是什麼,例如

mvn versions:set -DnewVersion=... 
cd projectA 
mvn versions:set -DnewVersion=... 
cd ../projectB 
mvn versions:set -DnewVersion=... 

這是因爲versions:set將嘗試如果父目錄包含一個聚合POM引用調用的項目「成長」的反應器...

換句話說,當你有沒有共同的父母反應器,版本假定普通版本號是偶然的,而是會從更廣泛的反應堆

+0

感謝有關版本的信息:set。這確實可以更好地解釋行爲。 –

+0

'updateMatchingVersions'的默認值是否已更改?在mvn 3.2.5中它默認是'true',我想要相反。 'mvn版本:set'改變了比我想要的更多的版本。我抓住了我的頭,直到我找到了答案! –

2
# for each module into aggregator pom 
for module in $(grep "\<module\>" pom.xml | sed 's/<\/module>//g' | sed 's/.*<module>//g' | sed 's/.*\///g') 
do 
    # set the version of the module 
    # and update reference to this module into others modules 
    mvn versions:set -DgenerateBackupPoms=false -DartifactId=$module \ 
     -DnewVersion=$newVersion -DupdateMatchingVersions=true 
done 
# set the version of the aggregator pom 
mvn versions:set versions:commit -DnewVersion=$newVersion 
1

我發現你一樣拿起意圖問題,然後我克隆版本插件代碼,然後我發現如果你設置gropuId,artifcatId,oldVersion值tobe *將解決問題; 是這樣的:

mvn versions:set -DnewVersion=xxx -DgroupId=* -DartifactId=* -DoldVersion=* 
相關問題