前不久,Spring Boot發佈了 2.3.0 版本,此版本對 Spring Boot 進行了至關重大的更改,而且這是使用 Gradle 而非 Maven 構建項目的第一個版本。關於 2.3.0 版本的新特性,本篇不作任何介紹。本文須要講的是爲何要切換爲Gradle而非Maven。spring
Spring Boot 團隊考慮由 Maven 切換到 Gradle 的主要緣由爲了減小構建項目所需的時間。在開發和測試過程當中,等待構建完成所花費的時間增長了修復錯誤和實現新功能所花費的時間。緩存
爲了解決這個問題,團隊曾嘗試利用 Maven 對並行構建的支持。因爲 Spring Boot 構建的複雜性,特別是對 Invoker 插件的使用,嘗試失敗。經過將構建分爲四個部分來解決 CI 問題。首先構建項目的主要核心,而後並行構建三個獨立的部分。但 CI 的構建仍須要一個小時或更長時間。此外,因爲針對的是模塊化 CI 構建,所以並無使得開發人員本地構建效率有所改變。maven
Spring Boot 團隊在其餘利用 Gradle 做爲構建工具的 Spring 項目中看到了 Gradle 的增量和並行構建以及在第三方項目中看到了 Gradle 的構建緩存的好處。但願經過使用 Gradle 爲 Spring Boot 構建得到相似的好處。模塊化
Gradle 具備很是靈活的構建模型,而且能夠定義每一個任務的輸入和輸出及其相互依賴性。這種構建模型的好處是,它容許任務並行運行,同時也能夠增量、緩存或徹底跳過。換句話說,Gradle 能夠最小化的執行必要的 CI 任務。雖然可使用了 Gradle Enterprise 的 Maven 支持,咱們也能夠享受構建緩存和跳過的好處。可是要充分享受這四個方面的好處,必須嘗試切換到 Gradle。spring-boot
Gradle 配置過於靈活,致使它的構建比基於 Maven 構建更難以維護和理解。例如: 同一個構建結果,能夠經過不一樣的配置實現。若是切換到 Gradle,須要避免這種狀況。從目前發佈的四個 Spring Boot 2.3 里程碑版本,在覈心團隊或貢獻者中,尚未發現任何重大的構建問題。工具
雖然現有 Gradle 生態系統對 Spring Boot 構建幾乎空白,須要從頭經過編寫不少通用的 gradle 插件來應用到 Spring Boot,但遷移到 Gradle 的提交從代碼庫中刪除了近 9500 行。性能
遷移Gradle方式後,能帶來哪些好處呢?如下是官方給出的一組數據:測試
就減小項目構建時間而言,在 CI 和開發人員機器上,基於 Maven 的完整構建都須要一個小時或更長時間。而基於 Gradle 的平均成功構建時間爲 9 分 22 秒,如如下截圖所示:
若是對構建性能的更多細節感興趣,能夠在 Spring Boot 的公共Gradle Enterprise實例上得到更多數據。gradle
除了提升性能外,對其餘功能進行探索。例如,一段時間以來,進行許多不穩定的測試。因爲這些緣由,構建失敗的次數比預期要多,能夠在 Tests 儀表板中看到這一點。使用 Gradle 分片測試來替代 CI 的通用測試方案,並幫組咱們瞭解是否已成功解決問題。ui
能夠發現,經過上面的數據對比,能夠得出以下結論:
不過,Gradle 確定是將來的趨勢,但也不必定非得遷移至 Gradle,只有適合本身的纔是最好的,畢竟如今 Maven 和 Gradle 都是主流,可是 Maven 更佔有市場,不少主流開源項目都是以 Maven 依賴來做爲示例演示的。