Spring Boot從2.3.0M1開始使用Gradle而不是Maven了 - spring.io

banq發表於2020-06-09

我們在2.3.0.M1中對Spring Boot進行了相當重大的更改。這是使用Gradle而非Maven構建的專案的第一個版本。
Spring Boot團隊考慮切換到Gradle的主要原因是為了減少構建專案所需的時間。在進行和測試更改時,我們對反饋迴圈的長度感到沮喪。等待構建完成所花費的時間增加了修復錯誤和實現新功能所花費的時間。我們已經在其他Spring專案中看到了Gradle的增量和並行構建以及在第三方專案中看到了Gradle的構建快取的好處。我們希望我們可以在Spring Boot的構建中獲得類似的好處。
過去,我們曾嘗試利用Maven對並行構建的支援。由於Spring Boot構建的複雜性,特別是對Invoker外掛的使用,我們的嘗試失敗了。我們透過將構建分為四個部分來解決CI問題。首先構建專案的主要核心,然後並行構建三個獨立的部分。這種安排有所幫助,但CI的構建仍需要一個小時或更長時間。此外,由於拆分結構特定於CI構建,因此它並沒有使開發人員的本地構建更快。
Gradle具有構建結構的廣泛模型,瞭解每個任務的輸入和輸出及其相互依賴性。這種建模的承諾是,它允許任務並行執行,同時也可以增量,快取兩者完全避免。換句話說,Gradle旨在最小化構建任何給定更改並並行執行必需的工作所需的工作量。使用Maven可能也可以並行構建。如果使用了Gradle Enterprise的Maven支援,我們也可以享受構建快取和不使用快取的好處。但是,要充分享受這四個方面的好處,我們認為我們必須嘗試切換到Gradle。
我們看到的對Gradle的一種批評是,它導致的構建比基於Maven的構建更難以維護和理解。Gradle的靈活性使事情可以用微妙的不同方式完成,即使是同一構建中的各個模組也是如此。
我想借此機會感謝Gradle團隊在遷移過程中提供的幫助,並慷慨地向我們提供了Gradle Enterprise許可以與我們的開源專案一起使用。我們已經在Spring Framework,Spring Security和Spring Boot中使用了它,其他團隊計劃開始在基於Gradle和Maven的構建中使用它。
我還要感謝我們正在使用的各種第三方外掛的維護者。他們提出了建議的更改,併合並了拉取請求,以改善對增量構建和快取的支援。沒有它們,我們將無法實現我們所看到的構建時間的減少。
如果您正在考慮從Maven遷移到Gradle,我希望多瞭解一些Spring Boot團隊的經驗是有用的。如果您是快樂的Maven使用者,請繼續使用並支援對您有效的工具。

相關文章