我想在guild.gradle.kts
文件中定义一个版本常量,以便甚至可以在plugins
块中使用它。 plugins
块需要restricted syntax:
[
«plugin version»
必须是常量,文字,字符串
遵循限制,我试图定义一个版本常量:
const val kotlinVersion = "1.3.72"
plugins {
java
kotlin("jvm") version kotlinVersion
}
但是此操作失败并显示消息
Const 'val' are only allowed on top level or in objects
即使该声明似乎满足所有const requirements。为什么不能在build.gradle.kts中使用const val
?
尽管看起来您的构建脚本是顶级的,但事实并非如此。 gradle文档在解释构建的生命周期时提到了这一点:
最后,通过对项目执行其
Project
文件(如果存在)来评估每个build.gradle
。
([source)这意味着在您的kotlin构建脚本中,接收者类型(即this
)为KotlinBuildScript
,最终是Project
的子类。我不知道有关如何评估的详细信息,但是我可以想象,这将等同于您在Kotlin中使用接收器类型执行的操作:
fun Project.evaluate(buildScript: Project.() -> Unit) = this.evaluate()
所以您的构建脚本实际上只是一个闭包的内部,因此为什么您不能使用const val
。