簡體   English   中英

如何在 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' 不能在此上下文中被隱式接收器調用。 如有必要,請使用顯式的。

您定義kotlinVersion的外部作用域 ( this@Build_gradle ) 在this@plugins作用域中不可用,因此您必須在 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指定的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM