Gradle 6.1 已發布,此版本支持可重定位的依賴項緩存,可配置 Java,Groovy 和 Scala 類之間的編譯順序,並啟動了一組新的可下載示例。同時還修復了一些錯誤,為 Gradle 插件作者提供了方便等等。
具體更新內容如下:
Gradle 的依賴項緩存可以重定位
$GRADLE_HOME/caches/modules-2
現在可以將 Gradle 6.1 和更高版本緩存的依賴項重新定位到 Gradle Dependency 緩存下。如果已經下載了依賴項,則將其移至新位置或植入主機映像后,使用依賴項緩存的構建將不需要訪問網路即可下載工件或元數據。
請注意,應使用相同的Gradle版本對緩存進行初始化和使用,以達到最佳效果。有關更多詳細信息,請參見文檔。
Gradle 團隊表示,這只是幫助使用臨時 CI 代理的組織減少構建過程中下載依賴項的開銷的第一步。
在Groovy,Scala和Java之間定義編譯順序
以前,Java,Groovy 和 Scala 編譯之間的關係是在同一項目中使用顯式任務依賴性進行硬編碼的。Gradle 假定 Groovy 和 Scala 編譯將始終依賴 Java 編譯。也就是說,compileGroovy
並且compileScala
將直接取決於的輸出compileJava
。
這些任務依賴項已使用目錄屬性進行了重塑。編譯任務之間的關係在任務的類路徑中表示。從類路徑中刪除目錄屬性也會刪除相應的任務依賴項。這可用於更改 Java,Groovy 和 Scala 編譯任務之間的關係。
例如,在以前,當在同一項目中組合 Groovy 和 Kotlin 時,就很難使 Kotlin 類依賴於 Groovy 類。
tasks.named('compileGroovy') { // Groovy only needs the declared dependencies // and not the output of compileJava classpath = sourceSets.main.compileClasspath } tasks.named('compileKotlin') { // Kotlin also depends on the result of Groovy compilation // which automatically makes it depend of compileGroovy classpath += files(sourceSets.main.groovy.classesDirectory) }
可下載的 Gradle 示例
除了教程和指南以及廣泛的用戶手冊,Gradle 現在還提供了樣本索引,以演示可以使用 Gradle 構建的各種項目,例如 Kotlin 或 Spring boot。這些樣本還展示了可以使用 Groovy 或 Kotlin DSL 解決的常見問題,例如向 Java 項目添加集成測試。每個樣本都捆綁了一個 Gradle 包裝器,因此用戶甚至無需嘗試就可以安裝 Gradle。
這些示例使用與文檔相同的 Gradle 版本進行測試。隨著時間的推移將添加更多樣本。如果您對問題或用例有任何建議,認為可以作為一個很好的例子,請打開一個新的問題。
使用 JDK8 + 對方法參數名稱進行 Groovy 編譯支持
Gradle 6.1 支持編譯 Groovy 代碼並包括方法參數名稱。
僅在查詢值時確定屬性值
在以前的 Gradle 版本中,某些 Gradle 類型(例如Property
或ConfigurableFileCollection
)提供了一種finalizeValue()
方法,可以急切地計算屬性的最終值並防止進一步的更改。
當任務開始運行時,Gradle 會自動完成這些類型的任務屬性,以便任務操作和 Gradle 的構建緩存/最新檢查可以看到相同的值。這也避免了多次計算屬性值,這有時可能很昂貴。插件還可以finalizeValue()
在查詢值之前用於完成其他屬性,例如項目擴展的屬性。
在此版本中,這些類型獲得了一種新finalizeValueOnRead()
方法。此方法與相似finalizeValue()
,不同之處在於最終值是在查詢值而不是立即查詢時計算的。如果屬性值的計算成本可能很高,或者尚未配置該值以確保該屬性的所有使用方從此點開始都能看到相同的最終值,則插件可以使用此方法。
請參閱用戶手冊以了解更多詳細信息。
New managed property types
Gradle 5.5 引入了任務和其他類型的託管屬性的概念,其中 Gradle 為在任務,項目擴展或其他自定義類型上定義的抽象屬性提供了getter和setter的實現。通過刪除一堆樣板,這簡化了插件的實現。
在此版本中,任務或其他自定義類型可能具有type的抽象只讀屬性DomainObjectSet<T>
。
請參閱用戶手冊以了解更多詳細信息。
New factory methods
該ObjectFactory
類型(插件和其他自定義類型用於創建各種有用類型的實例)具有多種新的工廠方法來創建某些 Gradle 類型,這些類型只能使用以前的版本中的內部API來創建:
polymorphicDomainObjectContainer()
創建ExtensiblePolymorphicDomainObjectContainer<T>
實例的方法。namedDomainObjectSet()
創建NamedDomainObjectSet<T>
實例的方法。namedDomainObjectList()
創建NamedDomainObjectList<T>
實例的方法。請參閱用戶手冊以了解更多詳細信息。
對 Gradle 工具提供商的改進
工具 API:TestLauncher
可以運行特定的Test
任務測試
TestLauncher
通過指定測試類或方法的名稱,Tooling API 中的介面已經可以啟動測試。但是,如果有多個Test
任務,則將Test
執行所有任務。
對於 IDE,開發人員通常只希望一次只執行一個任務。Gradle 6.1 引入了新的 API,以Test
使用withTaskAndTestClasses()
和withTaskAndTestMethods()
方法對特定任務執行測試。
[admin
]