[英]Gradle Kotlin DSL: Problems with subprojects and plugins
搖籃 6.1.1
我一直在嘗試使用 Kotlin DSL 轉換我的項目的 gradle 文件,但到目前為止失敗了。 我所有的項目都是用 Java 構建的多項目。 我在這里遵循了插件子項目示例
它看起來像這樣:
plugins {
idea
eclipse
}
subprojects {
apply(plugin = "java")
dependencies {
implementation("com.google.guava:guava:28.1-jre")
//...
}
}
子項目中似乎沒有理解 java 插件,並且所有“實現”行都得到了未解析的引用。
請參閱此處的文檔https://docs.gradle.org/current/userguide/kotlin_dsl.html 。
類型安全訪問器不可用於由以下貢獻的模型元素:
- 通過 apply(plugin = "id") 方法應用的插件
- ...
implementation()
是這樣一個類型安全的訪問器。 非類型安全方式如下所示:
apply(plugin = "java-library")
dependencies {
"api"("javax.measure:unit-api:1.0")
"implementation"("tec.units:unit-ri:1.0.3")
}
使用 groovy DSL,所有方法都是動態解析的(不是類型安全的),所以沒關系。
理解 build.gradle.kts 文件不是純 kotlin 文件會有所幫助。 如果頂部有大量進口,它們看起來會更丑。 因此,gradle 運行時會特殊對待“buildscript”和“plugins”塊。 “插件”被轉換成導入語句。 這不適用於 apply() 方法,該方法稍后在編譯文件時運行。 這也是 plugins 塊不能在其他地方使用的原因,它是一種特殊的構造,只是假裝是一個普通的代碼塊。 這里有更多細節https://docs.gradle.org/current/dsl/org.gradle.plugin.use.PluginDependenciesSpec.html
僅從模塊設計的角度來看,我通常建議多模塊構建中的根模塊仍然不知道子模塊的作用,即使有很多人像您的示例那樣使用子項目塊。 讓每個子模塊構建文件像一個獨立的 gradle 項目一樣完整,這樣讀者就不必閱讀 2 個文件來了解全貌。
有更好的明確方式在子項目之間共享配置。
如果需要從項目的根目錄 IMO 中添加額外的任務,最好使用根文件中的子項目塊。 不要注入插件或配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.