1. 程式人生 > >Gradle 5.0 正式版釋出

Gradle 5.0 正式版釋出

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 呼叫選項

測試

Gradle 5.0添加了對JUnit 5測試的支援:JUnit平臺、JUnit Jupiter和JUnit Vintage。這將支援允許您啟用測試分組和篩選,幷包括定製的測試引擎。

test {
    useJUnitPlatform {
        excludeTags 'slow'
        includeEngines 'junit-vintage'
        failFast = true
    }
}