2012-10-08 48 views
6

我有一個傳統的maven設置,其父項目和一些模塊是什麼子項目。當我做mvn deploy時,它會按順序(深度優先)爲每個項目運行整個生命週期(包括test),最高爲deploy。如果任何項目無法構建,我想避免部署任何子項目。換句話說,我希望整個父項目的deploy是「全部或全部」。有什麼辦法可以做到這一點?在部署任何模塊之前,讓maven父項目測試所有模塊

回答

3

如果你的遠程倉庫是Sonatype的的Nexus臨實例,然後臨的Nexus的「轉移」工具將允許原子發佈到存儲庫正確。

如果使用詹金斯,有延遲部署插件,將部署所有的文物作爲生成後(或非常生成後)動作(不介意太多,你使用的倉庫管理器)

最後,我對MRM-Maven的插件@ Codehaus的中期長期目標之一是允許部署的局部分期,這樣你就能夠做到像

mvn mrm:catch-deploy deploy mrm:push-deploy 

那最後一個還沒寫出來!

+0

我正在改變這個接受的答案,因爲我認爲你是正確的建議使用CI服務器而不是maven,這是我要採取的方法。 – Ramon

+0

斯蒂芬,詹金斯插件是指延遲部署? –

+0

不涉及任何特定的插件 –

8

Maven本身不能做到這一點(還)。目前,構建過程會分別運行每個模塊上的所有目標。有計劃地讓目標看大圖但是這可能對Maven 4.

在此同時,您可以使用一個小的shell腳本:

mvn clean install && mvn deploy -DskipTests=true 

第一次運行時建立的一切。第二次運行不會太多(所有的代碼已經被編譯,而且長時間的測試會被跳過),所以速度非常快。

我其實更喜歡這種方法,因爲我的腳本還用我公司的緩存替換了現有的distributionManagement元素。這意味着我可以爲我的公司部署任何項目,而無需對原始POM進行任何更改。下面是該腳本:

#!/bin/bash 

if [[ ! -e pom.xml ]]; then 
    echo "Missing pom.xml" 1>&2 
    exit 1 
fi 

sed \ 
    -e '/<distributionManagement>/,/<\/distributionManagement>/d' \ 
    -e '/<\/project/d' \ 
    pom.xml > pom-deploy.xml || exit 1 

cat >> pom-deploy.xml <<EOF 


    <!-- ADDED BY $0 --> 
    <distributionManagement> 
     ... whatever you need ... 
    </distributionManagement> 
</project> 
EOF 

mvn -f pom-deploy.xml clean install && \ 
    mvn -f pom-deploy.xml deploy -DskipTests=true && \ 
    rm pom-deploy.xml 

exit 0 

gist

相關問題