如何在 Gradle 中从 Kotlin 获取 Groovy DSL 提供的值

Nol*_*uen 5 groovy gradle kotlin build.gradle gradle-kotlin-dsl

假设以下配置:

build.dependencies.gradle:

ext {
  libraries = [:]
}

libraries += [
  library : [group: 'com.example', name: 'library', version: '1.1.1']
]
Run Code Online (Sandbox Code Playgroud)

build.gradle.kts:

apply(from = "build.dependencies.gradle")

dependencies {
  implementation(libraries["library"]) // does not work
}
Run Code Online (Sandbox Code Playgroud)

有没有办法获取 Groovy 脚本提供的值build.gradle.kts

Fra*_*teo 2

它不起作用\xe2\x80\x99,因为与 Groovy 不同,Kotlin 是静态/强类型语言。libraries未在 Gradle\xe2\x80\x99s API 的任何对象上定义。

\n\n

您可以像这样访问它:

\n\n
dependencies {\n    implementation((project.extra["libraries"] as LinkedHashMap<*, *>)["library"]!!)\n}\n\nprintln(project.extra["libraries"])\n
Run Code Online (Sandbox Code Playgroud)\n\n

project.extra[\xe2\x80\x9clibraries\xe2\x80\x9d]返回一个,Object所以我们需要正确地转换它才能获得下一个值。它也被标记为@Nullable因此!!运算符。

\n\n

\xe2\x80\x94

\n\n

管理依赖项版本的更好方法是利用Java 平台插件。

\n