史上最快、最強大的 Gradle 5.0 釋出,新特性全解!

Gradle 5.0 是有史以來速度最快、最安全、最強大的 Gradle 版本,這是 Gradle 官方給出的評價,v5.0 新增的功能主要包括:
- 在構建快取和更新檢查功能的基礎之上,Gradle 5.0 又改進了增量編譯和增量註解處理功能。
- 依賴約束、依賴對齊和版本鎖定提供了可伸縮且靈活的依賴管理模型。
- 新的效能提升、依賴關係管理、日誌和棄用 API 使用檢查讓構建掃描得到了顯著改善。
- 靜態型別的 Kotlin DSL 提供了程式碼自動完成、重構和其他 IDE 輔助,為 IDE 使用者帶來了一股清新的空氣。
更快的構建
構建速度慢其實是對金錢的浪費。使用 Gradle 5.0 新的構建快取和增量處理功能來構建你所需的內容,可以為開發人員和業務主管剩下很多時間。
升級到 Gradle 5.0 後,你的構建將立即變快,並且你可以通過使用和配置其他功能來進一步提高效能。

構建快取
通過重用先前執行的結果來避免重複工作讓 Gradle 變得更快。Gradle 4.0 引入了構建快取,目的是重用之前的呼叫輸出。
今天,Android、Kotlin、C++、Scala 和很多其他外掛使用了任務快取,因此可以在不同的機器上重用。有效使用構建快取可以將構建時間減少高達 90%。
此外,Gradle 5.0 中的構建快取也被用在更多的場景中,例如當一個任務宣告瞭 @OutputDirectories 或 @OutputFiles 的集合時。
https://gradle.org/images/whats-new/gradle-4.5-assemble-cache.webm
#### 增量 Java 編譯
在 Gradle 5.0 中,增量編譯器經過高度優化,併成為預設的編譯器。
除了第一次的構建,CompileJava 任務不需要重新編譯所有原始檔。
增量註解處理
Gradle 5.0 的增量編譯器支援增量註解處理,這是一項重要的創新,因為越來越多的專案依賴於註解處理器。
要使用增量註解處理,需要升級到受支援的註解處理器版本。你可以通過–info 日誌記錄或這個表格來檢視給定的註解處理器是否支援增量。
新的 annotationProcessor 配置可以用於管理註解處理器,並將它們放在註解處理器路徑中。
構建掃描
新的效能提升、依賴關係管理、日誌和棄用 API 使用檢查讓構建掃描得到了顯著改善。只需要在命令列執行 Gradle 時新增–scan,或者應用並配置構建掃描外掛。
細粒度的傳遞性依賴管理
Gradle 5.0 提供了一些新功能用於自定義如何選擇依賴項,並改進了對 POM 和 BOM 的支援:
- 依賴約束讓你可以通過定義版本或版本區間來限制直接和傳遞依賴(Maven 還不支援)。
- 原生支援平臺定義,即 Maven BOM 依賴,可以在不使用外部外掛的情況下匯入 Spring Boot 平臺定義之類的東西。
- 依賴對齊允許邏輯組中的不同模組(例如 Jackson 模組)對齊同一版本。
- 現在可以鎖定動態依賴版本,以便更好地進行可重現構建。
依賴約束
依賴約束為傳遞性依賴提供了非常健壯的控制。


BOM 支援
Gradle 5.0 可以匯入 BOM 檔案。


此外,Gradle 5.0 在使用 Maven 構建產生的依賴項方面提供了更加無縫的體驗。
在使用 POM 檔案時,Gradle 可以正確地分離編譯和執行時作用域,從而避免了由於之前在編譯類路徑中包含執行時依賴而導致的效能降低和依賴洩漏。
Gradle 現在也可以遵循 POM元素的版本區間。
依賴對齊
依賴版本對齊允許屬於同一邏輯組(平臺)的不同模組在依賴關係圖中具有相同的版本。
這樣可以確保所有 Spring 或 Hibernate 依賴項具有相同的版本(如果可以的話)。實際上,有很多庫作為集合釋出,集合中的每個庫具有相同的版本。
依賴版本鎖定
你可以使用 Gradle 5.0 將動態或區間依賴項鎖定在特定版本,讓依賴項解析更具確定性和可重現性,防止傳遞性依賴項的變更意外破壞你的構建。
編寫 Gradle 構建邏輯
現在可以使用 Kotlin 編寫 Gradle 構建指令碼。此外,gradle init 支援更多的專案型別和互動性。
Kotlin DSL 提供了 IDE 輔助
到 Gradle 5.0 為止,Kotlin DSL 1.0 已經為投入生產使用做好了準備。Kotlin 的靜態型別為 IDE 提供了更好的輔助,包括構建指令碼的除錯和重構、自動完成以及你期望的其他所有內容。
如果你有興趣使用 Kotlin 編寫你的構建版本,請從Gradle Kotlin DSL Primer開始。

互動式 gradle init
想要建立新 Gradle 構建的使用者現在可以選擇其他專案型別:kotlin-library 和 kotlin-application。此外,你可以選擇生成 Groovy 或 Kotlin DSL 構建指令碼,並自定義專案名稱和包。最後,新的互動式 UI 改進了使用者體驗。
https://gradle.org/images/whats-new/interactive-init.webm
更多面向用例的文件
Gradle 文件和入門指南提供了更多資訊和更好的訪問性:
- 幾個新改進的頁面,包括:入門、故障診斷、CLI 參考、管理傳遞性依賴以及其他幾個;
- 由 Algolia DocSearch 託管的可搜尋參考文件;
- 用於離線檢視的 PDF;
- 分類導航;
- 文件版本選擇。

更高效的記憶體利用
用於測試的–fail-fast 和 JVM 應用程式的命令列引數等功能有助於改善開發流程,而更低的記憶體要求和快取清理減少了 Gradle 的系統開銷。
降低記憶體使用量
在升級之後,你的構建不僅會更快,而且還會使用更少的記憶體。很多快取機制已在 Gradle 5.0 中得到了優化,因此 Gradle 程式的預設最大記憶體已大大減少。

定期 Gradle 快取清理
手動清理數十億位元組的舊 Gradle 快取的日子已經結束了。Gradle 現在可以定期清理過時的快取。Gradle 還可以更精確地跟蹤過時的任務輸出,並在不清理可能會導致錯誤結果的情況下清除它們。
新的 Gradle 呼叫選項
測試
Gradle 5.0 支援 JUnit 5 的 JUnit Platform、JUnit Jupiter 和 JUnit Vintage,允許你啟用測試分組和篩選,以及包含自定義測試引擎。


你可以使用–fail-fast 標誌啟用更快的紅綠迴圈,Gradle 5.0 預設情況下首先執行失敗的測試。
日誌記錄
在 Gradle 5.0 中,日誌訊息按照任務進行分組。
除了顯示正在執行哪些測試之外,Gradle 豐富的命令列控制檯還會顯示彩色的構建狀態資訊,可以一目瞭然地告訴你是否有任何構建失敗。你還可以通過“verbose”控制檯模式要求 Gradle 在執行任務時記錄任務。
最後,可以通過配置 warning-mode 來彙總、關閉或擴充套件 Gradle 警告日誌。

複合構建
複合構建允許你包含其他獨立專案,這樣你就可以同時開發應用程式和它依賴的庫。
你現在可以使用構建掃描來檢查複合構建。複合構建也相容–continuous。
它們預設進行並行構建,也可以巢狀。
JVM 應用程式的命令列引數
在使用 Gradle 5.0 是,可以更輕鬆地通過自定義引數執行 Java 應用程式,因為你可以在命令列或 IDE 上使用–args。
新的 Gradle 任務和外掛 API
Gradle 5.0 提供了很多新的 API,可實現更快、更通用的構建邏輯。
效能 API
新的 Worker API 支援更安全的並行和非同步執行。

改進的任務 I/O
正確地宣告輸入和輸出對於增量構建和構建快取行為來說是至關重要的。Gradle 5.0 強制執行更嚴格的約束,併為輸入和輸出宣告引入了新的 API。

Configuration Avoidance API
有些專案會建立大量的任務。如果只需要執行其中一些任務,就沒有必要配置所有的任務。於是 Gradle 5.0 提供了 Configuration Avoidance API。通過在自定義任務中使用這個 API,大型專案可以節省高達 10%的配置時間。

釋出 API
為了改進 Maven 和 Ivy 儲存庫的釋出,Gradle 5.0 引入了新的 API:
- 簽名外掛支援為釋出的所有工件簽名。
- 配置級別的排除依賴現在也包含在釋出中。
- Maven Publish 和 Ivy Publish 外掛提供了型別安全的 DSL,用於自定義作為釋出一部分而生成的 POM 或 Ivy 模組。
任務超時
現在可以指定任務的超時持續時間,也就是多久之後會被中斷。
自定義 CLI 引數
Gradle 5.0 提供了允許使用者配置自定義任務的新方法。
首先,你可以使用 @Option 建立自定義命令列選項。使用者通過執行 gradle help --task your-task 來獲得這些自定義選項:
複製程式碼
public class UrlVerify extends DefaultTask {
private String url;
@Option(option = "url", description = "Configures the URL to be verified.")
public void setUrl(String url) {
this.url = url;
}
@Input
public String getUrl() {
return url;
}
@TaskAction
public void verify() {
getLogger().quiet("Verifying URL '{}'", url);
// verify URL by making a HTTP call
}
}
自定義巢狀 DSL
為任務提供自定義巢狀 DSL。Gradle 5.0 為巢狀的 DSL 元素提供了一等 API,讓你可以更靈活地為使用者設計配置任務的方式。
如何升級?
我們提供了一個文件來幫助你從 Gradle 4.x 升級到 Gradle 5.0。在升級之前,我們建議你:
- 使用 Gradle 包裝器升級到 Gradle 4.10.2:gradle wrapper --gradle-version = 4.10.2。
- 執行 gradle help --scan 列出已棄用的 Gradle API 以及使用了這些 API 的地方(包括外掛)。
- 更新 Gradle 外掛,尤其是構建掃描報告中列出的已啟用的外掛。
- 升級到執行 Gradle 5.0 所需的 JDK 8 或更高版本。
- 如果你遇到問題,請參閱故障排除指南或訪問社群論壇。
英文原文:https://gradle.org/whats-new/gradle-5/
相關文章
- Gradle 5.0 正式版本釋出,一大波新特性來襲Gradle
- 重磅!阿里雲MongoDB 5.0釋出,速來圍觀新特性阿里MongoDB
- Java 11正式釋出,新特性解讀Java
- MQTT X CLI 正式釋出:強大易用的 MQTT 5.0 命令列工具MQQT命令列
- Swift 5.0 值得關注的特性:更強大的 Raw StringSwift
- [譯] Swift 5.0 新特性Swift
- Redis5.0 新特性Redis
- RDS釋出會解讀| AliSQL核心新特性SQL
- 重磅:谷歌釋出最強大AI模型【Google Gemini】谷歌AI模型Go
- 推理最強也最快,谷歌釋出Gemini 2.0 Flash Thinking,全面超越o1-preview谷歌ThinkingView
- 華為Mate40系列國內釋出 不負“史上最強Mate”之名
- 【轉】Spring Framework 5.0 新特性SpringFramework
- Swift5.0新特性更新Swift
- MongoDB 5.0新特性概覽MongoDB
- 2022蘋果釋出會“炸街”:429 美元起售的新 iPhone SE/ 史上“最強芯”M1 Ultra /Mac Studio蘋果iPhoneMac
- React 16 新特性全解(上)React
- Jenkins安裝配置,專案釋出、管理詳解,史上最清晰,值得收藏!Jenkins
- Rancher v2.6.4 社群版釋出 | 新特性解讀
- 【RcoketMQ】RcoketMQ 5.0新特性(一)- ProxyMQ
- 阿里雲解釋史上最長大規模中斷:機房溼了阿里
- 史上最強通用NLP模型GPT-2:OpenAI剛又釋出7.74億引數版本模型GPTOpenAI
- 英偉達釋出史上最強GPU,卻叫停了自動駕駛車路測GPU自動駕駛
- 正式釋出!VS Code 1.66新特性
- Win10 Build 17692釋出 7個新特性詳解Win10UI
- .NET 5.0釋出 - microsoftROS
- 主題別名 - MQTT 5.0 新特性MQQT
- dotnet cli 5.0 新特性——dotnet tool search
- 史上最強Tableau Server 安裝教程Server
- Redis5.0版本的12項新特性Redis
- MQTT 5.0 新特性 |(二) 原因碼與 ACKMQQT
- Webpack5.0 新特性嚐鮮實戰 ??Web
- 使用者屬性 - MQTT 5.0 新特性MQQT
- ES6新特性總結之let和const--史上最全最簡潔
- 【重磅】華為雲盤古大模型5.0,正式釋出!大模型
- Flink 1.11.0 釋出,有哪些值得關注的新特性?
- 史上最快遊戲手機,紅魔5G強勢霸榜詮釋遊戲美學遊戲
- 1.3億突觸、數萬神經元,谷歌、哈佛釋出史上最強三維「人腦地圖」谷歌地圖
- JDK 16 即將釋出,新特性速覽!JDK