简体   繁体   中英

How to parametrize Kotlin version in the plugins block of a build.gradle.kts script?

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?

Short answer:

There is currenlty no way of accessing anything of the outer scope from inside the lambda passed to plugins .

Long answer:

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
}

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM