我正在探索將我們基于 Groovy DSL 的構建檔案轉換為 Kotlin,并希望逐步進行。但是,我不知道如何讀取子專案中ext頂層設定的變數。build.gradlebuild.gradle.kts
我的實驗存盤庫在這里可用
它有這樣的布局:
.
├── README.md
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── groovy
│ └── build.gradle
├── kts
│ ├── build.gradle.kts
│ └── src
│ └── main
│ └── java
│ └── xyz
│ └── abc
│ └── def
│ └── Main.java
└── settings.gradle
頂級檔案定義了一個ext包含公共庫版本的變數,如下所示:
plugins {
id("java")
}
ext.libraries = [ shared: "xyz.abc.def:art:1.2" ]
有兩個子專案,一個使用 Groovy DSL,一個使用 Kotlin DSL。他們都試圖宣告對 的依賴libraries.shared。
╰─? cat groovy/build.gradle
plugins {
id("java")
}
dependencies {
implementation(libraries.shared)
}
╰─? cat kts/build.gradle.kts
plugins {
id("java")
}
dependencies {
implementation(libraries.shared)
}
settings.gradle 包括兩個專案。
╰─? cat settings.gradle
include "groovy"
include "kts"
當我運行時,./gradlew projects我收到此錯誤:
Line 6: implementation(libraries.shared)
^ Unresolved reference: libraries
當kts子專案的包含被注釋掉時,它會成功,顯示groovy子專案。
我嘗試了許多不同的方法來參考libraries,例如project.extraorextra但到目前為止還沒有找到任何有效的方法。
編輯:
在 Gradle API 檔案中挖掘之后,我想出了這個,它有效但絕對可怕。
implementation((project.getParent()!!.extra.properties["libraries"]!! as HashMap<String, String>).get("shared")!!);
uj5u.com熱心網友回復:
您可以在 kotlin 腳本中使用它
plugins {
java
}
val libraries: Map<String, String> by rootProject.extra
repositories {
mavenCentral()
}
dependencies {
implementation(libraries["shared"]!!)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/375953.html
