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

切尔尼

我想在guild.gradle.kts文件中定义一个版本常量,以便甚至可以在plugins块中使用它plugins块要求使用受限语法

«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要求为什么不能const val在build.gradle.kts中使用?

尼古拉斯

即使您的构建脚本似乎是顶级的,也并非如此。gradle文档在解释构建的生命周期时提到了这一点:

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在buid.gradle.kts中使用Kotlin DSL时,Gradle 5.0导致错误Val无法重新分配

kotlin const val只能在顶层或对象中使用Const'val'

Kotlin构造函数属性val不能在类中使用

Emscripten:不能在 pthread 中使用 emscripten::val

为什么不能在Kotlin中指定var / val循环?

在`settings.gradle.kts`中使用`dependencyResolutionManagement`时,如何在`gradle.build.kts`中配置自定义maven依赖?

不能在 Cron Ubuntu 中使用 Gradle

Gradle使用代理设置,但Gradle-wrapper不能。为什么?

在onclick之后使用.val可以在模拟器中使用,但不能在设备上使用

Gradle:为什么这个build.gradle.kts脚本无法产生任何Java类?

使用build.gradle.kts发布到mavenLocal

为什么@Transient不能与val字段一起使用?

为什么不能在data.table中使用`predict`?

为什么复数文字不能在clang中使用?

为什么不能在表达式中使用...语法?

为什么notifyAll()不能在线程实例中使用?

为什么不能在 for 循环中使用类型提示?

为什么我不能在开关案例中使用枚举?

为什么不能在 if 语句中使用空指针?

为什么不能在let或run中使用continue

为什么我不能在Swift中使用'object == nil'?

为什么我不能在CSS Variable中使用rgba?

为什么我不能在界面中使用默认方法?

为什么不能在函数中使用范围?

为什么不能在QLineEdit对象中使用StyleSheet?

为什么我不能在匿名类中使用<Class> .this?

为什么我不能在TRecord中使用Variable?

为什么我不能在列表中使用匿名函数?

为什么限制不能在拆分方法中使用?