我正在尝试将build.gradle转换为Kotlindsl。使用gradle 7.4.1。声明自定义配置的正确方法是什么。
configurations { grafana }
sourceSets { grafana }
和在依赖性块内
grafanaImplementation "org.slf4j:slf4j-simple:1.7.36"
grafanaImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
grafanaRuntimeOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
当我在kotlin-dsl的时候我在做
val grafana by configurations.creating
val grafanaSourceSet = sourceSets.create("grafana")
且在相关性块内
grafana("org.slf4j:slf4j-simple:1.7.36")
grafana("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
当我尝试将grafanaImplementation/ grafanaRuntimeOnly放在Kotlindsl中时,它失败了。
在Kotlindsl中,grafanaImplementation/ grafanaRuntimeOnly的等效用法是什么
1条答案
按热度按时间8ehkhllq1#
快速修复
当你这样做
Gradle将在后台创建所需的配置、
grafanaImplementation
、grafanaRuntimeOnly
等,因此您可以使用它们而不会出现如下错误:这种方法更像Groovy的工作方式-它基本上禁用了类型检查,字符串将在Gradle执行期间进行评估。
生成的DSL访问器
然而,字符串类型不是我们喜欢Kotlin的原因!我们需要类型安全和自动完成提示。这正是我们在
implementation()
和runtimeOnly()
中看到的。那么,我们如何为grafanaImplementation()
和grafanaRuntimeOnly()
获得它们呢?基本上,Gradle会扫描注册的配置,当它看到插件创建了
implementation
配置时,它会生成KotlinDSL访问器。但是,它无法为包含访问器定义的build.gradle.kts
生成访问器...这已经太晚了。因此,我们需要更早地定义配置。我们可以使用buildSrc插件来实现这一点。buildSrc图形约定插件
1.设置buildSrc项目(Gradle docs或other StackOverflow answers中详细介绍了这一点)
1.为Grafana配置创建预编译脚本插件
请注意,这个约定插件在应用Java插件时是相当武断的。在更复杂的设置中,你可能想对Java插件做出React,而不是总是应用它。
1.现在应用约定插件,Gradle将生成KotlinDSL访问器!