如何在 build.gradle.kts 脚本的插件块中参数化 Kotlin 版本?

Emi*_*dde 13 variables scope kotlin gradle-kotlin-dsl

在下面的脚本中:

val kotlinVersion by extra ("1.3.61")

println("Version "+kotlinVersion)

plugins {
    kotlin("jvm") version kotlinVersion
}
Run Code Online (Sandbox Code Playgroud)

变量kotlinVersion被正确打印。尽管如此,它在plugins块中未被识别,并且出现以下错误:

e: /home/achadde/sources/kotlin/minichain/build.gradle.kts:6:27: Unresolved reference: kotlinVersion
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Wil*_*zel 11

简短的回答:

当前无法从传递给 的 lambda 内部访问外部作用域的任何内容plugins

长答案:

如果您使用 IntelliJ,它会向您显示更多信息:

'val kotlinVersion: String' 不能在此上下文中被隐式接收器调用。如有必要,请使用显式的。

this@Build_gradle您定义的外部作用域 ( ) 在作用域中kotlinVersion不可用,this@plugins因此您必须kotlinVersion在插件 lambda 内部定义。

由于extra委托在那里不可用,您也不能使用它:

plugins {
    val kotlinVersion = "1.3.61"
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,使用标签不起作用:

val kotlinVersion by extra ("1.3.61")

plugins {
    // ... Unresolved reference: kotlinVersion 
    kotlin("jvm") version this@Build_gradle.kotlinVersion
}
Run Code Online (Sandbox Code Playgroud)