Как заставить плагин Kotlin Gradle не управлять версией - PullRequest
0 голосов
/ 23 сентября 2019

Когда я использую плагин 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 голосов
/ 26 сентября 2019

Я не могу воспроизвести это, похоже на ошибку.В качестве обходного пути вы можете принудительно установить конкретную версию, указав isForce = true:

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

isForce не транзитивно, поэтому вы должны явно указать все переходные зависимости kotlin с помощью isForce отметьте true или создайте виртуальную платформу :

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.

...