为什么不能在构建中使用`const瓦尔`,gradle.kts

wlzqhblo  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(140)

我想在guild.gradle.kts文件中定义一个版本常量,以便它甚至可以在plugins块中使用。plugins块需要受限语法:
«plugin version»必须是常量、文字、字符串
遵循限制,我试图定义a版本常量:

const val kotlinVersion = "1.3.72"

plugins {
    java
    kotlin("jvm") version kotlinVersion
}

然而,这与消息失败

Const 'val' are only allowed on top level or in objects

即使声明似乎满足所有const要求。为什么不能在构建中使用const val?gradle.kts?

nszi6y05

nszi6y051#

即使看起来你的构建脚本是顶级的,但它不是。Gradle文档在解释构建的生命周期时提到了这一点:
最后,针对项目执行每个Projectbuild.gradle文件(如果存在)来评估每个Project
source)这意味着在Kotlin构建脚本中,接收器类型(i.即this)是KotlinBuildScript,其最终是Project的子类。我不知道如何评估它的细节,但我可以想象它将等同于你可以在Kotlin中使用接收器类型所做的事情:

fun Project.evaluate(buildScript: Project.() -> Unit) = this.evaluate()

所以你的构建脚本实际上只是闭包的内部,这就是为什么你不能使用const val

wr98u20j

wr98u20j2#

这不是一个特定的Gradle问题(*.gradle.kts),而是Kotlin脚本(任何*.kts)文件的限制。
它们还不支持任何const val赋值。
您可以查看相关的YouTrack问题以了解更多信息:https://youtrack.jetbrains.com/issue/KT-20110/Kotlin-script-file-doesnt-support-compile-time-constants-const-val-are-only-allowed-on-top-level-or-in-objects

相关问题