Gradle 5.0 正式版發佈了,官方表示這是史上最快、最安全,最強大的版本,且沒有之一。改進的增量編譯和增量註釋處理構建在已經具備構建緩存和最新檢查功能的可靠性能基礎之上。依賴對齊和版本鎖定提供了可擴展且靈活的依賴管理模型。經過新的性能和依賴關係管理、日誌記錄和棄用的 API 使用檢查,構建掃描獲得了顯著的改進。靜態類型的 Kotlin DSL 可在建立構建邏輯時提供代碼完成、重構和其餘的 IDE 輔助。html
根據官方文檔介紹,這次更新主要帶來了以下幾個方面的改進:
更快的構建
細粒度的傳遞依賴管理
編寫 Gradle 構建邏輯
更高效的內存執行
新的 Gradle 調用選項
新的 Gradle 任務和插件 APIjava
緩慢的構建過程既浪費錢又浪費精力,而經過使用Gradle 5.0中的新構建緩存和增量處理特性,將使得構建過程帶來質的提高。
升級到Gradle 5.0以後,您的構建速度將明顯提高,您還能夠經過使用和配置本節中描述的其餘特性來進一步提升構建的性能。c++
經過重用構建緩存來避免重複的構建工做,這使得Gradle的構建將很是快,Gradle 4.0引入了構建緩存,其目的是重用之前調用Gradle時的輸出。spring
如今,Gradle 5.0能夠用於Android、Kotlin、c++、Scala和許多其餘插件的插件,使得任務能夠緩存,所以能夠跨不一樣的機器重用。有效地使用構建緩存能夠將構建時間減小90%左右。apache
此外,Gradle 5.0中的構建緩存在不少場景中也是啓用的,例如當一個任務聲明一個@ outputdirectory或@OutputFiles集合時。api
在Gradle 5.0中,增量編譯器是通過高度優化的,且默認使用增量編譯功能。這是一個很是棒的消息,由於編譯java任務不須要從新編譯全部的源文件,除了第一次以外,這將大大的提供代碼編譯的效率。緩存
Gradle 5.0中的增量編譯器支持增量註解處理,當有註解處理程序時,能夠顯著提升增量編譯的效率。這是一個重要的創新,由於依賴註解處理器的項目愈來愈多。安全
要利用增量註解處理,請確保升級到選擇該特性的註解處理程序版本。您能夠經過info日誌記錄或查看註解處理程序來發現給定的註解過程是否具備支持增量功能。app
使用新的annotationProcessor配置能夠方便地管理註解處理器,並將它們放到註解處理器路徑上。dom
經過對性能、依賴管理、日誌記錄和廢棄api的使用進行新的檢查,構建掃描有了顯著的改進。這是一個免費的服務,主要提供給Gradle用戶在須要添加掃描時使用,在命令行上執行Gradle或應用和配置便可構建掃描。
Gradle 5.0提供了幾個新的特性來定製如何選擇依賴項,以及改進的POM和BOM支持:
依賴約束提供了對傳遞依賴項的可靠性控制,已聲明的約束列在改進的依賴關係洞察報告和構建掃描中。例如,下面是常見的Groovy依賴腳本:
dependencies { implementation 'org.apache.httpcomponents:httpclient' constraints { implementation('org.apache.httpcomponents:httpclient:4.5.3') { because 'previous versions have a bug impacting this application' } implementation('commons-codec:commons-codec:1.11') { because 'version 1.9 pulled from httpclient has bugs affecting this application' } } }
Gradle 5.0可導入BOM文件,bom (bill of materials) 能夠有效解決同一項目,不一樣版本依賴的問題。
dependencies { // import a BOM implementation platform('org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE') // define dependencies without versions implementation 'com.google.code.gson:gson' implementation 'dom4j:dom4j' }
此外,Gradle 5.0在使用Maven構建生成的依賴項時提供了更無縫的體驗。
依賴項版本對齊,容許屬於同一邏輯組(平臺)的不一樣模塊在依賴項中擁有相同的版本。
這確保全部Spring或Hibernate依賴項具備相同版本的問題。事實上,有許多庫是以集合的形式發佈的,集合中的每一個庫具備相同的版本。
您可使用Gradle 5.0將動態或遠程依賴項鎖定到特定的版本,從而使依賴項解析更加肯定和可重現,這能夠防止依賴項的更改帶來地破壞構建問題。
如今可使用Kotlin編寫Gradle構建腳本。此外,gradle init還擴展了項目類型和交互性。
Kotlin DSL 從1.0版本便提供了對Gradle的支持。Kotlin中的靜態類型容許工具提供更好的IDE幫助,包括調試和重構構建腳本、自動完成和您指望的其餘一切。
若是您對用Kotlin編寫構建感興趣,能夠從Gradle Kotlin DSL入門開始
但願使用Gradle構建項目的用戶能夠選擇其餘項目類型一塊兒使用,如kotlin-library和kotlin-application。此外,您能夠選擇生成Groovy或Kotlin DSL構建腳本,並自定義項目名稱和包。
此外,Gradle文檔和入門指南提供了更多的信息,而且更容易發現和訪問,主要體如今:
更高效的內存執行命令行參數等特性容許更好的開發工做流,同時下降內存需求和緩存清理能夠減小Gradle在系統上的開銷。
升級Gradle 5.0 不只會使構建速度更快,並且還會大大減小內存的使用。許多緩存機制在Gradle 5.0中獲得了優化,而且Gradle進程的默認最大內存大大減小。
Process Type | Gradle 4.x default heap | Gradle 5.0 default heap |
---|---|---|
Command-line client | 1 GB | 64 MB |
Gradle Daemon | 1 GB | 512 MB |
Worker processes | 1/4 of physical memory | 512 MB |
如今,手動清理緩存的日子已經結束了,Gradle如今能夠實現按期清理過時緩存。Gradle還更精確地跟蹤陳舊的任務輸出,並在不致使錯誤結果的狀況下清理它們。
Gradle 5.0添加了對JUnit 5測試的支持:JUnit平臺、JUnit Jupiter和JUnit Vintage。這將支持容許您啓用測試分組和篩選,幷包括定製的測試引擎。
test { useJUnitPlatform { excludeTags 'slow' includeEngines 'junit-vintage' failFast = true } }
您可使用fail-fast標誌來啓用一個更快的紅綠循環,默認狀況下,第5.0版本將首先執行失敗的測試,這進一步改進了該標誌。
在Gradle 5.0中,日誌消息能夠按照非交互環境(如持續集成執行),進行日誌消息的任務分組。
除了顯示正在執行哪些測試以外,Gradle豐富的命令行控制檯還顯示了一個彩色的構建狀態,能夠一眼就看出是那些測試失敗的狀況。您還能夠要求Gradle在任務使用「詳細」控制檯模式執行時記錄它們。
最後,經過配置警告模式,Gradle還能夠總結、沉默或擴展Gradle警告日誌。
複合構建容許您包含其餘獨立項目,例如,您能夠同時開發應用程序和依賴的庫。
如今您還可使用構建掃描檢查複合構建。複合構建還能夠與continuous兼容。默認狀況下它們是並行構建的,如今能夠嵌套了。
使用Gradle 5.0運行帶有自定義參數的Java應用程序將比其餘版本容易得多,由於您能夠在命令行上或經過IDE簡單地使用它們。
Gradle 5.0提供了許多新的api,這些api支持更快、更通用的構建邏輯。
新的Worker API將容許您安全的並行和異步執行任務。按照咱們的指南,使用Worker API爲自定義任務啓用更快的構建任務,下圖展現了使用Worker API和不是也Worker API的區別。
正確聲明輸入和輸出對於增量構建和構建緩存行爲相當重要。Gradle 5.0增強了約束,併爲輸入/輸出聲明引入了新的api,這些api能夠幫助您避免一些低級問題。
有些項目在執行過程當中會產生不少的任務,當只執行一些操做時,配置全部這些操做是沒有意義的。這就是Gradle 5.0的新配置避免api的神奇之處。經過在自定義任務中採用這些配置,大型項目能夠節省高達10%的配置時間。
Gradle 5.0引入了新的api來改進對Maven和Ivy存儲庫的管理。主要包括:
如今您能夠爲任務指定超時時間,超時後任務將被中斷。
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 } }
爲使用內部api的任務Gradle提供自定義的嵌套DSL。Gradle 5.0爲嵌套DSL元素提供了一流的api,在考慮用戶如何配置任務時提供了更大的靈活性。
Gradle 5.0爲計算(或延遲)任務輸入和輸出提供了額外的API便利。這使得自定義任務時可以將Gradle模型鏈接在一塊兒,而不用擔憂給定的屬性值被修改,也不用擔憂在任務配置期間會避免資源密集型工做。
爲了升級到5.0版本。升級前,咱們給出以下一些建議:
若是遇到問題,請參閱故障排除指南或聯繫社區論壇,您也能夠參考咱們給出的升級文檔。