前言
SpringBoot2.3一系列版本釋出以來,有了很多的特性,比如優雅的關機。衆多新的特性,代表作為公認的開源家族Spring來說,一直都在進步。那麼我們就需要從變化中,汲取其中的養分和思考變化的原因。好了,回歸今天的主題。一直關注送出者大佬的Twitter,近來大佬發的一個消息,比較震撼,也是一種信号。

大意為:在Spring Boot 2.3中,我們将建構從Maven遷移到了Gradle。如果您對我們進行更改的原因和方式感興趣,我剛剛釋出了一篇部落格文章,其中包含一些詳細資訊:
https://spring.io/blog/2020/06/08/migrating-spring-boot-s逐漸建構……。現在,平均而言,CI建構速度提高了3到4倍,本地建構速度提高了20到30倍。正如大佬的評論區的疑問一樣,我也有類似的疑問。
那麼,就詳細的看了下,對應的文章
https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle文章對疑問做了很好的诠釋。
實實在在的變化
确實,在2.3.0.M1中對Spring Boot進行了相當重大的更改。這是使用Gradle而非Maven建構的項目的第一個版本。
為何切換
Spring Boot團隊考慮改用Gradle的主要原因是為了減少建構項目所需的時間。在進行和測試更改時,反應鍊過長,等待建構完成所花費的時間增加了修複錯誤和實作新功能所花費的時間。在其他Spring項目中看到了Gradle的增量和并行建構的好處,在第三方項目中看到了Gradle的建構緩存的好處。希望可以在Spring Boot的建構中獲得類似的好處。
過去,雖然曾嘗試利用Maven對并行建構的支援。由于Spring Boot建構的複雜性,特别是對Invoker插件的使用,嘗試失敗。
Gradle具有建構結構的廣泛模型,了解每個任務的輸入和輸出及其互相依賴性。這種模組化的承諾是,它允許任務并行運作,同時也可以增量,緩存或完全避免。換句話說,Gradle旨在最小化建構任何給定更改并并行執行必需的工作所需的工作量。是以,需要使用到Gradle的優點,是切換的一大原因。
好處在哪
就減少項目的建構時間而言,将建構遷移到Gradle無疑是成功的。如上所述,在CI和開發人員自己的計算機上,基于Maven的完整建構都需要一個小時或更長時間。經過官方測試,Gradle的平均成功建構時間為9分22秒,如以下螢幕截圖所示:
從圖中,我們可以看到如此明顯的提升。
如何切換
按照文章了解來,如下:
長久來,對Gradle的一種批評是,它導緻的建構比基于Maven的建構更難以維護和了解。Gradle的靈活性使事情可以以不同的方式完成,即使是同一版本中的各個子產品也是如此。如果切換成功,就需要避免這種情況。已經釋出了四個Spring Boot 2.3裡程碑,其候選釋出版以及與Gradle一起釋出的最終版本,看來已經成功了。在核心團隊或其他任何貢獻者中,還沒有發現任何重大的建構問題。
Spring Boot的一個關鍵功能是約定優于配置,也将這種方法應用于建構。按照避免在build.gradle檔案中包含指令式邏輯的建議,編寫了幾個可以在項目的buildSrc中找到的小插件。例如,有一個适用于每個Spring Boot啟動器子產品的啟動器插件,以確定它們的配置,建構和釋出都一緻我們還有一個約定俗成的插件,可以對正在應用的其他插件做出反應,并配置諸如源代碼編碼,使用JUnit Platform以及使用-parameters進行編譯等功能。
這種方法導緻build.gradle檔案幾乎完全是聲明性的。即使編寫了許多插件來應用約定并填補Gradle生态系統中的空白,但遷移到Gradle的送出從代碼庫中删除了近9500行。
對于切換的過程,我們可以大緻了解下,可以追溯曆史,看到從2.3開始版本,開始使用Gradle建構。
總結思考
雖然CI建構效率大大相比Maven建構大大提升,也許會有小夥伴質疑,Spring Boot 遷移到了 Gradle,會不會對公司現有的 Maven 項目或者後續的版本更新造成影響呢?答案是否定的。
Gradle 肯定是未來的趨勢,但也不一定非得遷移至 Gradle,隻有适合自己的才是最好的,畢竟現在 Maven 和 Gradle 都是主流,而且Maven 更占有市場,很多主流開源項目都是以 Maven 依賴來作為示例示範的。
但是,按照技術人的思維來看,我們也需要去了解,學習Gradle的建構過程。在未來一刻,估計最後還是要擁抱Gradle。