如何使Kotlin Gradle插件不管理版本

时间:2019-09-23 09:00:21

标签: gradle gradle-kotlin-dsl

当我使用Kotlin Gradle插件并同时使用Kotlin BOM时,似乎插件版本优先使用kotlin-stdlib,如何使插件不管理我的依赖关系?

plugins {
    kotlin("jvm") version "1.2.50"
}

dependencies {
        implementation(platform("some-bom:0.3")) // this has API dependency to kotlin-bom 1.3.50
        implementation(kotlin("stdlib")) // this resolves to 1.2.50 (plugin version) instead of 1.3.50 (BOM version)
}

项目正在使用Gradle 5.2.1

1 个答案:

答案 0 :(得分:0)

我无法复制它,它看起来像个错误。解决方法是,您可以通过指定isForce = true enforce特定版本:

implementation("org.jetbrains.kotlin:kotlin-stdlib:1.2.50") {
    isForce = true
}
implementation("org.jetbrains.kotlin:kotlin-stdlib-common:1.3.10"){
   isForce = true
}

isForce不是可传递的,因此必须使用isForce标志true显式指定所有可传递的kotlin依赖项,或创建一个virtual platform

open class KotlinAlignmentRule : ComponentMetadataRule {
    override fun execute(ctx: ComponentMetadataContext) {
        ctx.details.run {
            if (id.group == "org.jetbrains.kotlin") {
                belongsTo("org.jetbrains.kotlin:kotlin-platform:${id.version}")
            }
        }
    }
}

并将其添加到您的依赖项块中:

dependencies {
    components.all(KotlinAlignmentRule::class.java)
    implementation(platform("some-bom:0.3")) 
    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.2.50") {
        isForce = true
    }
}

最后一个解决方案是最好的imo。