Reputation: 1815
In the script below:
val kotlinVersion by extra ("1.3.61")
println("Version "+kotlinVersion)
plugins {
kotlin("jvm") version kotlinVersion
}
The variable kotlinVersion
is correctly printed. Nevertheless it is not recognized in the plugins
block and the following error is risen:
e: /home/achadde/sources/kotlin/minichain/build.gradle.kts:6:27: Unresolved reference: kotlinVersion
How can I fix this?
Upvotes: 25
Views: 6478
Reputation: 29844
There is currenlty no way of accessing anything of the outer scope from inside the lambda passed to plugins
.
In case you use IntelliJ it will show you a bit more information:
'val kotlinVersion: String' can't be called in this context by implicit receiver. Use the explicit one if necessary.
The outer scope (this@Build_gradle
) where you define kotlinVersion
is not avaiable in the this@plugins
scope so you have to define kotlinVersion
inside the plugins lambda.
Since the extra
delegate isn't available there either you can't use it:
plugins {
val kotlinVersion = "1.3.61"
// ...
}
Unfortunately using a label does not work:
val kotlinVersion by extra ("1.3.61")
plugins {
// ... Unresolved reference: kotlinVersion
kotlin("jvm") version this@Build_gradle.kotlinVersion
}
Upvotes: 22
Reputation: 705
For whatever reason, the plugins
block can't read the outer scope, so what I did was added the following entry to my settings.gradle.kts
instead:
pluginManagement.resolutionStrategy.eachPlugin {
if (requested.id.id.startsWith("org.jetbrains.kotlin.")) {
useVersion("1.4.10")
}
}
With my build.gradle.kts
now as follows:
plugins {
kotlin("jvm")
kotlin("kapt")
}
println(kotlin.coreLibrariesVersion)
Note how the version can now be omitted. The following print statement will print out the version we specified in our settings.gradle.kts
, if we ever want to access our Kotlin version further down in our build script.
Upvotes: 3