【问题标题】:Why cannot be `const val` used in build.gradle.kts为什么不能在 build.gradle.kts 中使用 `const val`
【发布时间】:2020-09-03 11:17:19
【问题描述】:

我想在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 constants gradle-kotlin-dsl


    【解决方案1】:

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

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

    (source) 这意味着在您的 kotlin 构建脚本中,接收器类型(即this)是KotlinBuildScript,它最终是Project 的子类。我不知道如何评估它的详细信息,但我可以想象它相当于你在 Kotlin 中使用接收器类型可以做的事情:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2014-07-11
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多