开发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
相关产品推荐
相关产品推荐

