我想在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?
2条答案
按热度按时间nszi6y051#
即使看起来你的构建脚本是顶级的,但它不是。Gradle文档在解释构建的生命周期时提到了这一点:
最后,针对项目执行每个
Project
的build.gradle
文件(如果存在)来评估每个Project
。(source)这意味着在Kotlin构建脚本中,接收器类型(i.即
this
)是KotlinBuildScript
,其最终是Project
的子类。我不知道如何评估它的细节,但我可以想象它将等同于你可以在Kotlin中使用接收器类型所做的事情:所以你的构建脚本实际上只是闭包的内部,这就是为什么你不能使用
const val
。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