为什么不能在build.gradle.kts中使用“ const val”

问题描述 投票:1回答:1

我想在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

kotlin gradle build.gradle const gradle-kotlin-dsl
1个回答
2
投票

尽管看起来您的构建脚本是顶级的,但事实并非如此。 gradle文档在解释构建的生命周期时提到了这一点:

最后,通过对项目执行其Project文件(如果存在)来评估每个build.gradle

([source)这意味着在您的kotlin构建脚本中,接收者类型(即this)为KotlinBuildScript,最终是Project的子类。我不知道有关如何评估的详细信息,但是我可以想象,这将等同于您在Kotlin中使用接收器类型执行的操作:

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

所以您的构建脚本实际上只是一个闭包的内部,因此为什么您不能使用const val

© www.soinside.com 2019 - 2024. All rights reserved.