如何在 build.gradle.kts 脚本的插件块中参数化 Kotlin 版本?
How to parametrize Kotlin version in the plugins block of a build.gradle.kts script?
在下面的脚本中:
val kotlinVersion by extra ("1.3.61")
println("Version "+kotlinVersion)
plugins {
kotlin("jvm") version kotlinVersion
}
变量kotlinVersion
打印正确。然而,它在 plugins
块中未被识别,并且出现以下错误:
e: /home/achadde/sources/kotlin/minichain/build.gradle.kts:6:27: Unresolved reference: kotlinVersion
我该如何解决这个问题?
简答:
目前无法从传递给 plugins
的 lambda 内部访问外部作用域的任何内容。
长答案:
如果您使用 IntelliJ,它会显示更多信息:
'val kotlinVersion: String' can't be called in this context by implicit receiver. Use the explicit one if necessary.
您定义 kotlinVersion
的外部作用域 (this@Build_gradle
) 在 this@plugins
作用域中不可用,因此您必须在插件 lambda 中定义 kotlinVersion
。
由于 extra
委托在那里不可用,因此您不能使用它:
plugins {
val kotlinVersion = "1.3.61"
// ...
}
不幸的是,使用标签不起作用:
val kotlinVersion by extra ("1.3.61")
plugins {
// ... Unresolved reference: kotlinVersion
kotlin("jvm") version this@Build_gradle.kotlinVersion
}
出于某种原因,plugins
块无法读取外部范围,所以我所做的是将以下条目添加到我的 settings.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)
请注意现在可以省略版本。如果我们想在构建脚本中进一步访问我们的 Kotlin 版本,以下打印语句将打印出我们在 settings.gradle.kts
中指定的版本。
在下面的脚本中:
val kotlinVersion by extra ("1.3.61")
println("Version "+kotlinVersion)
plugins {
kotlin("jvm") version kotlinVersion
}
变量kotlinVersion
打印正确。然而,它在 plugins
块中未被识别,并且出现以下错误:
e: /home/achadde/sources/kotlin/minichain/build.gradle.kts:6:27: Unresolved reference: kotlinVersion
我该如何解决这个问题?
简答:
目前无法从传递给 plugins
的 lambda 内部访问外部作用域的任何内容。
长答案:
如果您使用 IntelliJ,它会显示更多信息:
'val kotlinVersion: String' can't be called in this context by implicit receiver. Use the explicit one if necessary.
您定义 kotlinVersion
的外部作用域 (this@Build_gradle
) 在 this@plugins
作用域中不可用,因此您必须在插件 lambda 中定义 kotlinVersion
。
由于 extra
委托在那里不可用,因此您不能使用它:
plugins {
val kotlinVersion = "1.3.61"
// ...
}
不幸的是,使用标签不起作用:
val kotlinVersion by extra ("1.3.61")
plugins {
// ... Unresolved reference: kotlinVersion
kotlin("jvm") version this@Build_gradle.kotlinVersion
}
出于某种原因,plugins
块无法读取外部范围,所以我所做的是将以下条目添加到我的 settings.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)
请注意现在可以省略版本。如果我们想在构建脚本中进一步访问我们的 Kotlin 版本,以下打印语句将打印出我们在 settings.gradle.kts
中指定的版本。