2012-09-11 93 views
5

我使用的是Jenkins 1.462,maven版本是3.0.4。 在詹金斯我啓用複選框「增量編譯 - 只有建立更改的模塊」在Jenkins中增量構建

我想弄清楚兩個問題:

  1. 無論增量生成足夠? 例如,How do I trigger a Jenkins build of a single module in a multi-module Maven build from Subversion?例如聲明它不工作在100% 這裏在第19頁http://www.slideshare.net/andrewbayer/7-habits-of-highly-effective-jenkins-users表明增量構建是對完整構建而不是替代的補充。

  2. 是否增量式構建 - 僅構建更改模塊實際上按預期工作? 我的意思是?如果我有模塊A,B,X,C,D,X使用A和B,C使用X,D使用C,我在X模塊中進行更改。比我想要重新編譯模塊X(itslef),C(直接使用X)和D(即傳遞閉包; D使用C,使用C)。

注意:這是我爲了啓用增量構建而做的唯一更改。

回答

3

如前所述Maven的文檔增量構建都不是很可靠的,至少到3.0.4:

目前(3.0.4)的Apache Maven的不支持增量構建非常 好。

https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds(第一行)

相反,我會強烈建議使用任何這兩種方法的加快你的構建:

  • 使用並行構建。根據我在大型項目中的經驗,這種方法效果很好,並且可以極大地減少構建時間(如果有的話)的風險。只需執行類似mvn -T 1.5C clean installhttps://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

  • 如果你的模塊都是獨立的,你可以只是將它們移動到不同的項目和使用Maven依賴粘合在一起他們。

+0

Downvoted作爲建議的解決方案產生非常嚴重的問題:使用「MVN安裝」,在詹金斯將產生意想不到的行爲,如果你有超過1臺構建機器或建造超過1支。一般來說,構建不應該依賴構建機器的狀態,這就是爲什麼「mvn install」是一個非常危險的想法。如果您有相互依存關係,則使用存儲庫管理器,並根據需要更新依賴關係版本(不啓用「覆蓋版本」,否則會導致重複性下降)。 – marcv81

+1

嗨marcv81,mvn安裝不一定依賴於生成機器的狀態。如果您正在使用Maven發佈,那麼您還應該使用中央回購來推送和拉動您的工件。無論如何,如果你願意,你可以替換任何其他目標的安裝,問題是關於加速構建,而不是關於Maven有幾個選項的依賴管理。 –

+0

嗨Adrian,mvn安裝會默認更改生成機器的狀態,因爲它會在本地存儲庫中安裝工件。這會影響下一個依賴於當前版本的構建的結果。問題是關於性能,但答案打破了重複性,因此我的downvote /評論。我提到使用工件庫;另外一個正確實施的好習慣是爲每個構建啓動一個新的虛擬機。在每次構建之前,這個可憐的人的版本是rm -rf〜/ .m2/repository。 – marcv81