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

标签 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

最佳答案

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

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。

关于gradle - 如何使Kotlin Gradle插件不管理版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58058949/

相关文章:

java - 并行运行两个Jetty服务器

gradle - Gradle Kotlin DSL:配置任务: Unresolved reference

gradle - Gradle (Kotlin DSL): “Unresolved reference: proguard”

android - 如何使用 kotlin-dsl Gradle 插件从 Kotlin 1.2 迁移到 1.3?

gradle - 在 gradle 依赖中,为什么 API 配置会丢弃所有传递依赖?

gradle - 使用 Gradle Kotlin 配置 Maven 插件

android - 使用Bamboo运行构建作业时,在Mac OS x上找不到ANDROID_HOME

bash - Gradle 环境变量。从文件加载

Android:计算任务图错误

testing - 如何使用 gradle 命令行运行多个测试运行程序类