我有一個存儲在Git中的Maven 3多模塊項目(〜50個模塊)。多個開發人員正在研究這個代碼並構建它,而且我們也有自動構建機器,可以在每次推動時運行冷建模。在Maven中使用緩存的構件以避免重複構建?
大多數個人更新日誌會在很少的模塊中更改代碼,因此,每次更改都會重建整個源代碼樹,這是浪費時間。但是,我仍然希望運行父項目構建的最終結果與構建完整代碼庫的結果相同。我不想開始手動版本化模塊,因爲這將成爲交叉版本更新的惡夢。
我想要做的是添加一個攔截構建或安裝中的某個步驟的插件,並接受模塊內容(理想情況下從Git拉出)的散列,然後查看共享二進制存儲庫中存儲的工件那個散列。如果找到一個,它會使用該工件,甚至不執行完整的構建。如果它在緩存中找不到任何東西,它會像平常一樣執行構建,然後將其構件存儲在緩存中。重建任何具有依賴關係(直接或瞬態)的模塊本身也有一個緩存未命中的情況也是很好的。
有什麼東西可以做到這樣的事嗎?如果不是,將其添加到Maven的最簡潔的方法是什麼?看起來插件可能能夠完成它,但是對於一些作品我很難找到正確的方式來附加到Maven。特別是:
- 如何攔截「安裝」目標來檢查緩存,並且只調用緩存未命中模塊的「本機」安裝目標?
- 插件應該如何將狀態從一個模塊傳遞到另一個模塊,以瞭解哪些緩存未命中發生,以便強制重建依賴關係並進行更改?
我也接受完全不同的方式來達到同樣的最終結果(更少的冗餘構建),儘管解決方案越激進,對我來說近期價值就越低。
你在使用詹金斯嗎?你可以將jenkins配置爲僅使用'mvn -am -amd -pl module clean install'使用本地存儲庫構建maven支持的已更改模塊(稱爲增量構建),這將顯着縮短構建時間。 – khmarbaise
不幸的是沒有。我們使用的是Bamboo,我相信無論是它還是我們的腳本都會導致本地存儲庫對於每個構建都是空的。 – enroth
如果您的腳本清理本地存儲庫,則必須使用完整的版本,否則您可能會更改該版本。根據文檔,竹不支持從UI等增量構建,但你可以在Maven的命令行和一些腳本上做到這一點。可能它已經足夠用一個乾淨的構建而不是每個構建'mvn -pl module -amd package'構建每晚。您當然可以使用存儲庫管理器來存儲這些工件,並讓maven完成工作。 – khmarbaise