You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Kotlin版Gradle插件时解决Kotlin库版本冲突的方法:如何排除Gradle内置的Kotlin 1.3.72依赖

解决Gradle插件开发中的Kotlin版本冲突问题

我来帮你搞定这个Kotlin版本冲突的麻烦!核心原因就是Gradle自己内置了一套1.3.72版本的Kotlin库,而你开发插件时用了更高的1.4.21-2版本,导致类路径里同时存在两套不同版本的库,从而触发了警告。下面给你两个靠谱的解决方案,你可以按需选择:

方案一:升级Gradle版本(最省心)

Gradle从6.8版本开始,内置的Kotlin版本已经升级到1.4.20,和你用的1.4.21-2几乎没差异,兼容性拉满。你只需要修改gradle/wrapper/gradle-wrapper.properties里的distributionUrl:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip

升级后,Gradle自带的Kotlin版本和你的插件依赖版本一致,冲突直接就消失了,这也是最推荐的做法。

方案二:强制指定Kotlin版本(不升级Gradle的情况)

如果暂时不想升级Gradle,那我们可以通过配置让Gradle强制使用你指定的1.4.21-2版本,替换掉它内置的旧版本。修改你的build.gradle.kts如下:

plugins {
    kotlin("jvm") version "1.4.21-2"
    `java-gradle-plugin`
    `maven-publish`
}

// 强制所有Kotlin相关依赖使用我们指定的版本
configurations.all {
    resolutionStrategy {
        force(
            "org.jetbrains.kotlin:kotlin-stdlib:1.4.21-2",
            "org.jetbrains.kotlin:kotlin-stdlib-common:1.4.21-2",
            "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.21-2",
            "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.21-2",
            "org.jetbrains.kotlin:kotlin-reflect:1.4.21-2"
        )
    }
}

dependencies {
    // 把compileOnly改成implementation,确保我们的Kotlin版本被优先加载
    implementation(kotlin("stdlib-jdk8"))
    implementation(kotlin("reflect"))
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
    testImplementation("org.junit.jupiter:junit-jupiter-engine:5.7.0")
}

repositories {
    mavenCentral()
    jcenter()
}

gradlePlugin {
    plugins {
        create("changed.this.for.this.post") {
            id = "changed.this.for.this.post"
            implementationClass = "changed.this.for.this.post.MyPlugin"
            version = project.version
        }
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java) {
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

关键修改点解释:

  • 新增的configurations.all块:通过resolutionStrategy.force告诉Gradle,所有Kotlin核心库必须使用1.4.21-2版本,不管它自己内置的是啥版本,这样就能强制替换掉旧版本。
  • 把compileOnly换成implementation:这样能确保你的插件构建时优先加载我们指定的Kotlin版本,避免运行时不小心用到Gradle内置的旧库。

另外,日志里提示的“建议显式依赖kotlin-reflect 1.4版本”,上面的配置已经通过implementation(kotlin("reflect"))搞定了,完全符合要求。

内容的提问来源于stack exchange,提问作者stratjunkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:27:34