用IDEA創建第一個用Gradle編譯的SpringBoot項目

一、爲什麼要從maven切換到gradle

在 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 倍。

二、IDEA實戰創建一個基於Gradle的SpringBoot項目

1、打開IDEA,創建一個新的項目

2、選擇Spring Initializer,確認你的JDK正確配置,選擇默認的Starter service URL即可

3、填寫自己的包和正確的artifact名稱

4、勾選Spring Web功能,方便後續編寫接口測試

5、確認項目名和項目地址

6、IDEA問你是否開啓新的窗口,我這裏選擇是

7、如果你的IDEA是第一次創建Gradle項目,可能初始化比較慢,因爲IDEA需要下載Gradle需要的各種基礎jar和組件工具,

這裏請保持足夠的耐心!(我第一次大概等了半個小時,家裏網速不給力啊)

8、爲了測試,在main包下面隨便新建一個HelloController,這裏我放在HelloGradleApplication同級

9、找到啓動類,右鍵debug啓動試試看

10、最後試着訪問我們剛纔編寫的那個rest api接口地址,這裏是:http://localhost:8080/hello ,沒有任何懸念的我們成功訪問成功了

今天第一個關於Gradle編譯的SpringBoot項目就成功了,我們下回再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章