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

Variables 如何在build.gradle.kts脚本的plugins块中参数化Kotlin版本?,variables,kotlin,scope,gradle-kotlin-dsl,Variables,Kotlin,Scope,Gradle Kotlin Dsl,在下面的脚本中: val kotlinVersion by extra ("1.3.61") println("Version "+kotlinVersion) plugins { kotlin("jvm") version kotlinVersion } 变量kotlinVersion已正确打印。然而,插件块中无法识别它,并且出现以下错误: e: /home/achadde/sources/kotlin/minichai

在下面的脚本中:

val kotlinVersion by extra ("1.3.61")

println("Version "+kotlinVersion)

plugins {
    kotlin("jvm") version kotlinVersion
}
变量
kotlinVersion
已正确打印。然而,
插件
块中无法识别它,并且出现以下错误:

e: /home/achadde/sources/kotlin/minichain/build.gradle.kts:6:27: Unresolved reference: kotlinVersion
如何解决此问题?

简短回答: 目前无法从传递给
插件的lambda内部访问外部作用域的任何内容

长答覆: 如果您使用IntelliJ,它将向您显示更多信息:

隐式接收器在此上下文中无法调用“val kotlinVersion:String”。如有必要,请使用显式

外部范围(
this@Build_gradle
)在
this@plugins
scope,因此必须在插件lambda中定义
kotlinVersion

由于
额外的
代理在那里不可用,您也不能使用它:

plugins {
    val kotlinVersion = "1.3.61"
    // ...
}

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

val kotlinVersion by extra ("1.3.61")

plugins {
    // ... Unresolved reference: kotlinVersion 
    kotlin("jvm") version this@Build_gradle.kotlinVersion
}

无论出于何种原因,
插件
块无法读取外部范围,因此我所做的是将以下条目添加到我的
设置.gradle.kts

pluginManagement.resolutionStrategy.eachPlugin {
    if (requested.id.id.startsWith("org.jetbrains.kotlin.")) {
        useVersion("1.4.10")
    }
}
现在使用我的
build.gradle.kts
如下所示:

plugins {
    kotlin("jvm")
    kotlin("kapt")
}

println(kotlin.coreLibrariesVersion)
请注意,现在如何省略该版本。下面的print语句将打印出我们在
settings.gradle.kts
中指定的版本,如果我们想在构建脚本中进一步访问我们的Kotlin版本