
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/