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