首页 > 解决方案 > 如何从 Gradle 中的 Kotlin 获取 Groovy DSL 提供的值

问题描述

假设以下配置:

build.dependencies.gradle

ext {
  libraries = [:]
}

libraries += [
  library : [group: 'com.example', name: 'library', version: '1.1.1']
]

build.gradle.kts

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

dependencies {
  implementation(libraries["library"]) // does not work
}

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

标签: gradlekotlingroovybuild.gradlegradle-kotlin-dsl

解决方案


它不起作用,因为 Kotlin 是与 Groovy 不同的静态/强类型语言。libraries没有在 Gradle 的 API 中的任何对象上定义。

您可以像这样访问它:

dependencies {
    implementation((project.extra["libraries"] as LinkedHashMap<*, *>)["library"]!!)
}

println(project.extra["libraries"])

project.extra[“libraries”]返回一个Object所以我们需要正确地转换它以获得下一个值。它也被标记为@Nullable因此!!运算符。

——</p>

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


推荐阅读