Gradle 5.0 正式版釋出
ofollow,noindex">Gradle 5.0 正式版釋出了 ,官方表示這是史上最快、最安全,最強大的版本,且沒有之一。改進的增量編譯和增量註釋處理構建在已經具有構建快取和最新檢查功能的可靠效能基礎之上。依賴對齊和版本鎖定提供了可擴充套件且靈活的依賴管理模型。通過新的效能和依賴關係管理、日誌記錄和棄用的 API 使用檢查,構建掃描得到了顯著的改進。靜態型別的 Kotlin DSL 可在建立構建邏輯時提供程式碼完成、重構和其他的 IDE 輔助。
根據官方文件介紹,此次更新主要帶來了如下幾個方面的改進:更快的構建 細粒度的傳遞依賴管理 編寫 Gradle 構建邏輯 更高效的記憶體執行 新的 Gradle 呼叫選項 新的 Gradle 任務和外掛 API
更快的構建
緩慢的構建過程既浪費錢又浪費精力,而通過使用Gradle 5.0中的新構建快取和增量處理特性,將使得構建過程帶來質的提升。 升級到Gradle 5.0之後,您的構建速度將明顯提升,您還可以通過使用和配置本節中描述的其他特性來進一步提高構建的效能。

構建快取
通過重用構建快取來避免重複的構建工作,這使得Gradle的構建將非常快,Gradle 4.0引入了構建快取,其目的是重用以前呼叫Gradle時的輸出。
現在,Gradle 5.0可以用於Android、Kotlin、c++、Scala和許多其他外掛的外掛,使得任務可以快取,因此可以跨不同的機器重用。有效地使用構建快取可以將構建時間減少90%左右。
此外,Gradle 5.0中的構建快取在很多場景中也是啟用的,例如當一個任務宣告一個@ outputdirectory或@OutputFiles集合時。

Java增量編譯
在Gradle 5.0中,增量編譯器是經過高度優化的,且預設使用增量編譯功能。這是一個非常棒的訊息,因為編譯java任務不需要重新編譯所有的原始檔,除了第一次之外,這將大大的提供程式碼編譯的效率。
增量註解處理
Gradle 5.0中的增量編譯器支援增量註解處理,當有註解處理程式時,可以顯著提高增量編譯的效率。這是一個重要的創新,因為依賴註解處理器的專案越來越多。
要利用增量註解處理,請確保升級到選擇該特性的註解處理程式版本。您可以通過info日誌記錄或檢視註解處理程式來發現給定的註解過程是否具有支援增量功能。
使用新的annotationProcessor配置可以方便地管理註解處理器,並將它們放到註解處理器路徑上。
構建掃描
通過對效能、依賴管理、日誌記錄和廢棄api的使用進行新的檢查,構建掃描有了顯著的改進。這是一個免費的服務,主要提供給Gradle使用者在需要新增掃描時使用,在命令列上執行Gradle或應用和配置即可構建掃描。
細粒度的傳遞依賴管理
Gradle 5.0提供了幾個新的特性來定製如何選擇依賴項,以及改進的POM和BOM支援:
- 依賴約束允許您定義版本或版本範圍,從而限制和傳遞依賴版本(Maven不支援)。
- 平臺定義(又稱Maven BOM依賴項)是本地支援的,它允許在不使用外部外掛的情況下匯入Spring之類的東西。
- 依賴項對齊允許邏輯組中的不同模組(例如Jackson模組)對齊到相同的版本。
依賴約束
依賴約束提供了對傳遞依賴項的可靠性控制,已宣告的約束列在改進的依賴關係洞察報告和構建掃描中。例如,下面是常見的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' } } } 複製程式碼
OM支援
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構建生成的依賴項時提供了更無縫的體驗。
- 在使用POM檔案時,Gradle將正確地分離編譯和執行時範圍。這可以有效的避免由於以前在編譯類路徑中包含執行時依賴項而導致的效能下降和依賴項洩漏問題。
- Gradle現在也可以用在< pom>元素中。
依賴對齊
依賴項版本對齊,允許屬於同一邏輯組(平臺)的不同模組在依賴項中擁有相同的版本。
這確保所有Spring或Hibernate依賴項具有相同版本的問題。事實上,有許多庫是以集合的形式釋出的,集合中的每個庫具有相同的版本。
依賴版本鎖定
您可以使用Gradle 5.0將動態或遠端依賴項鎖定到特定的版本,從而使依賴項解析更加確定和可重現,這可以防止依賴項的更改帶來地破壞構建問題。
編寫 Gradle 構建邏輯
現在可以使用Kotlin編寫Gradle構建指令碼。此外,gradle init還擴充套件了專案型別和互動性。
Kotlin DSL幫助資訊
Kotlin DSL 從1.0版本便提供了對Gradle的支援。Kotlin中的靜態型別允許工具提供更好的IDE幫助,包括除錯和重構構建指令碼、自動完成和您期望的其他一切。
如果您對用Kotlin編寫構建感興趣,可以從 Gradle Kotlin DSL入門開始

擴大和互動
希望使用Gradle構建專案的使用者可以選擇其他專案型別一起使用,如kotlin-library和kotlin-application。此外,您可以選擇生成Groovy或Kotlin DSL構建指令碼,並自定義專案名稱和包。

更有指導性的文件
此外,Gradle文件和入門指南提供了更多的資訊,並且更容易發現和訪問,主要體現在:
- 改進了包括入門、故障排除、CLI引用、管理傳遞依賴關係,以及其他一些的一些頁面。
- 由Algolia DocSearch託管的可搜尋參考文件。
- 一個重新格式化的PDF供離線檢視。
- 分類導航。
- 文件版本選擇。
更高效的記憶體執行
更高效的記憶體執行命令列引數等特性允許更好的開發工作流,同時降低記憶體需求和快取清理可以減少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 呼叫選項
JUnit 測試
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相容。預設情況下它們是並行構建的,現在可以嵌套了。
JVM命令列引數
使用Gradle 5.0執行帶有自定義引數的Java應用程式將比其他版本容易得多,因為您可以在命令列上或通過IDE簡單地使用它們。
新的 Gradle 任務和外掛 API
Gradle 5.0提供了許多新的api,這些api支援更快、更通用的構建邏輯。
高效能API
新的Worker API將允許您安全的並行和非同步執行任務。按照我們的指南,使用Worker API為自定義任務啟用更快的構建任務,下圖展示了使用Worker API和不是也Worker API的區別。

改進的I/O任務
正確宣告輸入和輸出對於增量構建和構建快取行為至關重要。Gradle 5.0加強了約束,併為輸入/輸出宣告引入了新的api,這些api可以幫助您避免一些低階問題。

避免冗餘配置
有些專案在執行過程中會產生很多的任務,當只執行一些操作時,配置所有這些操作是沒有意義的。這就是Gradle 5.0的新配置避免api的神奇之處。通過在自定義任務中採用這些配置,大型專案可以節省高達10%的配置時間。

APIs
Gradle 5.0引入了新的api來改進對Maven和Ivy儲存庫的管理。主要包括:
- 簽名外掛支援對釋出的所有工件簽名。
- 釋出了配置範圍內的依賴項排除。
- Maven釋出和Ivy釋出外掛提供型別安全的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
為使用內部api的任務Gradle提供自定義的巢狀DSL。Gradle 5.0為巢狀DSL元素提供了一流的api,在考慮使用者如何配置任務時提供了更大的靈活性。
Gradle 5.0為計算(或延遲)任務輸入和輸出提供了額外的API便利。這使得自定義任務時能夠將Gradle模型連線在一起,而不用擔心給定的屬性值被修改,也不用擔心在任務配置期間會避免資源密集型工作。