在 2.3.0 中對 Spring Boot 進行了相當重大的更改,這是使用 Gradle 而非 Maven 構建的專案的第一個版本,
Spring 的每個專案都獨立的專案組在開發運營,在用戶最常使用的白盒部分(例如 API 設計)保持一致性,對于用戶不可見的黑盒部分,各個專案組選擇自己適合工具沒有統一的約定,
例如: 專案構建工具,Spring Framework 自 2012 年的 3.2.0 起就使用 Gradle 構建,而一年后開始使用 Spring Boot,此后不久又開始使用 Spring Cloud,兩者都基于 Maven,
| 專案 | 構建工具 |
|---|---|
| Spring Framework | Gradle |
| Spring Boot | Maven |
| Spring Cloud | Maven |
為什么要切換
Spring Boot 團隊考慮由 Maven 切換到 Gradle 的主要原因為了減少構建專案所需的時間,在開發和測驗程序中,等待構建完成所花費的時間增加了修復錯誤和實作新功能所花費的時間,
為了解決這個問題,團隊曾嘗試利用 Maven 對并行構建的支持,由于 Spring Boot 構建的復雜性,特別是對 Invoker 插件的使用,嘗試失敗,通過將構建分為四個部分來解決 CI 問題,首先構建專案的主要核心,然后并行構建三個獨立的部分,但 CI 的構建仍需要一個小時或更長時間,此外,由于針對的是模塊化 CI 構建,因此并沒有使得開發人員本地構建效率有所改變,
Spring Boot 團隊在其他利用 Gradle 作為構建工具的 Spring 專案中看到了 Gradle 的增量和并行構建以及在第三方專案中看到了 Gradle 的構建快取的好處,希望通過使用 Gradle 為 Spring Boot 構建獲得類似的好處,
Gradle 具有非常靈活的構建模型,并且可以定義每個任務的輸入和輸出及其相互依賴性,這種構建模型的好處是,它允許任務并行運行,同時也可以增量、快取或完全跳過,換句話說,Gradle 可以最小化的執行必要的 CI 任務,雖然可以使用了 Gradle Enterprise 的 Maven 支持,我們也可以享受構建快取和跳過的好處,但是要充分享受這四個方面的好處,必須嘗試切換到 Gradle,
如何切換
Gradle 配置過于靈活,導致它的構建比基于 Maven 構建更難以維護和理解,例如: 同一個構建結果,可以通過不同的配置實作,如果切換到 Gradle,需要避免這種情況,從目前發布的四個 Spring Boot 2.3 里程碑版本,在核心團隊或貢獻者中,還沒有發現任何重大的構建問題,
- Spring Boot 關鍵功能是約定優于配置,將這種方法應用于構建,避免在 build.gradle 檔案中包含命令式邏輯,撰寫了幾個可以在專案的中找到的小插件 buildSrc,,
雖然現有 Gradle 生態系統對 Spring Boot 構建幾乎空白,需要從頭通過撰寫很多通用的 gradle 插件來應用到 Spring Boot,但遷移到 Gradle 的提交從代碼庫中洗掉了近 9500 行,
切換結果
就減少專案構建時間而言,將構建遷移到 Gradle 無疑是成功的,如上所述,在 CI 和開發人員機器上,基于 Maven 的完整構建都需要一個小時或更長時間,而基于 Gradle 的平均成功構建時間為 9 分 22 秒,如以下截圖所示:

如果對構建性能的更多細節感興趣,可以在 Spring Boot 的公共Gradle Enterprise實體上獲得更多資料,
除了提高性能外,對其他功能進行探索,例如,一段時間以來,進行許多不穩定的測驗,由于這些原因,構建失敗的次數比預期要多,可以在 Tests 儀表板中看到這一點,使用 Gradle 分片測驗來替代 CI 的通用測驗方案,并幫組我們了解是否已成功解決問題,

結論
CI 構建現在平均大約需要 20 分鐘,比以前快 3-4 倍,
本地構建平均需要 2 分鐘 30 秒,比以前快 20-30 倍,
https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle
https://gitee.com/sxfad/gradle-scripts
專案推薦: Spring Cloud 、Spring Security OAuth2的RBAC權限管理系統 歡迎關注
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162681.html
標籤:Java
下一篇:Java筆試真題及參考答案
