未解决的参考: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

如何解析和修改build.gradle.kts Kotlin Gradle构建脚本?

如何在 build.gradle.kts 中设置 openApi 生成器全局属性

在 build.gradle.kts 中添加后无法导入类