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/
更多內容,請關注前端之巔公衆號(ID:frontshow)