2012-08-25 120 views
2

我在思考一個想法,並想向開發人員社區提出一個問題。 由於我在大規模的JAVA項目中使用maven在實踐中具有驚人的益處。然而,隨着時間的推移,項目正在迅速增長並出現更多模塊,從而導致構建時間巨大,並且這對持續集成沒有影響。Maven 2.2.1優化項目構建時間

的問題 - 有一些現成的功能,將允許智能建築項目,可以先檢查是否有模塊目標罐子從一個位於本地Maven倉庫不同。如果後者是真的,maven可以繼續到下一個模塊,而不需要重建和重新部署相同的模塊?

Regards

回答

2

最好的辦法是切換到Maven 3支持並行通過建立

mvn -T 3.0C clean package 

什麼也幫助是建立什麼變化,可通過Maven的實現:

mvn -pl module -am package 

也做許多像詹金斯這樣的CI系統支持增量構建。還要檢查哪種測試正在運行?你能並行運行單元測試嗎? (行家-萬無一失-插件)。這些單元測試真的是單元測試還是可能其中一些集成測試呢?

1

這個問題沒有靈丹妙藥。這是許多大型項目面臨的普遍問題。

CI觸發的事實通常是由SCM提交,所以我建議總是改變一些東西。

不知道你在用什麼CI,模塊是如何配置的等等。除了一些基礎知識之外,我不能提供很多建議。

1)確保您在CI中配置的模塊儘可能細化 - 即儘可能小的構建單元。這意味着單個提交不需要重新編譯大量代碼。

2)開發者習慣:只提交一個完整的工作單元。這就是Git所關心的。開發人員在本地進行提交,然後只在工作單元完成時推送給主設備。這減少了下游CI構建。

3)查看您在Maven中使用的報告和模塊。有些需要永遠運行。你真的需要他們嗎?

+0

這些都是您提出的偉大的觀點/建議,並且每一項都經過了審查和實施,然而想法還是要走得更遠。感謝您的想法和建議。 – Xeperis

0

問題 - 是否有一些開箱即用的功能,可以讓智能項目建設可以首先檢查模塊目標jar是否與位於本地maven repository中的模塊不同? [...]

唯一的「機靈」我知道是跳過「乾淨」階段構建,你不需要—這樣一些消息來源不會被編譯,或者不必要的資源再生。不過,項目將被重新包裝。

你也可以考慮一些模塊排除到不同的開發週期(除非你真的需要在每一個版本在所有這些變化)。然後,更新頻率較低的模塊可以作爲依賴關係從資源庫—中提取出來,這些模塊需要單獨構建和部署。

0

(假設:團隊內部repositiory)

脫機(如果授予由插件)構建:

mvn -o ... 

(假設:IDE建立在後臺繞過行家(增量編譯)

限制交叉模塊的依賴關係從其他模塊導入非常容易,有時候會出現糾結的依賴關係網