未解决的参考:build.gradle.kts中的KotlinCompilerVersion
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未解决的参考:build.gradle.kts中的KotlinCompilerVersion相关的知识,希望对你有一定的参考价值。
在build.gradle.kts
文件中,我将此代码包含在第一行。然后我在下面使用KotlinCompilerVesion.VERSION。
import org.jetbrains.kotlin.config.KotlinCompilerVersion
一些代码工作正常,但一些代码失败:
似乎只有plugins
块不能启用这个import
。
这里工作正常:
dependencies {
Implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
Implementation(kotlin("test", KotlinCompilerVersion.VERSION))
}
这总是错的:
plugins {
id("com.android.application")
kotlin("android")
kotlin("android.extensions")
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version KotlinCompilerVersion.VERSION
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version "$KotlinCompilerVersion.VERSION"
/*
* Error: Unresolved reference: KotlinCompilerVersion
*/
id("kotlinx-serialization") version "${KotlinCompilerVersion.VERSION}"
}
如何在这里正确使用它,而不声明ext.xxxVersion
var?
是的,插件DSL的语法是有限的,因为Gradle在解析文件的其余部分之前解析它,这要求定义是静态的(没有引用变量,常量等,几乎不允许代码)。有关详细信息,请参阅Limitations of the plugins DSL。
我只处理定义Kotlin版本一次的方法是实际使用我在插件块中指定的版本作为文件其他部分的规范(我从this blog post by Simon Wirtz中选择了这个),如下所示:
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
val kotlinVersion = plugins.getPlugin(KotlinPluginWrapper::class.java)
.kotlinPluginVersion
plugins {
kotlin("jvm") version "1.3.30"
}
dependencies {
implementation(platform(kotlin("bom", kotlinVersion)))
implementation(kotlin("stdlib-jdk8"))
}
但是,是的,在插件块中它需要是静态的,不幸的是,如果需要的话重复。
更新:我实际上刚刚了解到可以在插件DSL中使用常量,但必须在Gradle解析build.gradle.kts
文件之前定义它们,即从buildSrc
。我在fuel库中注意到了这一点。本质上,使用以下内容创建buildSrc/build.gradle.kts
:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
然后使用以下内容创建buildSrc/src/main/kotlin/Constants.kt
:
object Kotlin {
const val version = "1.3.30"
}
然后你就可以在你的主要build.gradle.kts
中使用以下内容:
plugins {
kotlin("jvm") version Kotlin.version
}
以上是关于未解决的参考:build.gradle.kts中的KotlinCompilerVersion的主要内容,如果未能解决你的问题,请参考以下文章
如何将 ext.* 变量放入 build.gradle.kts 中的插件块中
如何使用 kotlinscript DSL (build.gradle.kts) 通过 url 添加 maven 存储库
如何解析和修改build.gradle.kts Kotlin Gradle构建脚本?