为什么我不能在 Plugins {} 中使用 val?

Smu*_*aco 7 kotlin gradle-kotlin-dsl

val kotlinVersion = "1.3.72"
plugins {
    // Error: 'val kotlinVersion: String' can't be called in this context by implicit receiver. Use the explicit one if necessary
    kotlin("jvm").version(kotlinVersion)]
}
Run Code Online (Sandbox Code Playgroud)

我也使用 Kotlin 的标准库作为依赖项,我只想在一个地方指定版本,但是当我尝试像上面在 build.gradle.kts 中所做的那样时,我收到了您在评论中看到的错误。我该如何解决这个问题?

Ale*_*nov 3

请参阅Gradle 文档中的约束语法:

plugins {}块不支持任意代码。它受到约束,以便幂等(每次产生相同的结果)和无副作用(Gradle 可以随时安全执行)...

并链接到插件版本管理以解决该问题(根据您的情况)

pluginManagement {
  plugins {
    id("kotlin").version(kotlinVersion)
  }
}
Run Code Online (Sandbox Code Playgroud)

我相信应该有效。

或者根据

PluginDependencySpec.version(String) 允许插入字符串,但替换值必须来自 Gradle 属性。

看来如果你kotlinVersiongradle.properties其中声明可以用作

version("${kotlinVersion}")
Run Code Online (Sandbox Code Playgroud)

plugins {}

  • 我在 `gradle.properties` 中声明了,但它不起作用。 (4认同)