Gradle多项目中Kotlin JVM插件版本冲突问题求助
解决Gradle多项目中Kotlin JVM插件版本冲突问题
核心问题原因
你的Android主项目project_android的类路径中已经间接引入了org.jetbrains.kotlin.jvm插件的版本(通常是com.android.application/com.android.library插件或org.jetbrains.kotlin.android插件自动依赖带入的),因此作为子模块的project_lib不能再指定插件版本;但project_lib作为独立仓库单独构建时,没有父项目的类路径依赖,必须显式指定版本才能构建。
解决方案
方案1:用pluginManagement统一管理插件版本
在project_lib的根目录创建/修改settings.gradle.kts(Groovy则用settings.gradle),配置插件版本管理,让单独构建时能获取版本,作为子模块时继承父项目配置:
KTS版本(settings.gradle.kts)
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } plugins { val kotlinVersion = "1.9.20" // 替换为你实际使用的Kotlin版本 id("org.jetbrains.kotlin.jvm") version kotlinVersion apply false } }
对应的project_lib build.gradle.kts
plugins { id("org.jetbrains.kotlin.jvm") // 不再指定版本 }
Groovy版本(settings.gradle)
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } plugins { def kotlinVersion = '1.9.20' id 'org.jetbrains.kotlin.jvm' version kotlinVersion apply false } }
对应的project_lib build.gradle
plugins { id 'org.jetbrains.kotlin.jvm' }
方案2:通过条件判断动态指定版本
在project_lib的构建脚本中,判断当前是否为独立构建(无父项目),仅在独立构建时指定插件版本:
Groovy版本(build.gradle)
plugins { if (!parent) { id 'org.jetbrains.kotlin.jvm' version '1.9.20' } else { id 'org.jetbrains.kotlin.jvm' } }
KTS版本(build.gradle.kts)
plugins { if (project.parent == null) { id("org.jetbrains.kotlin.jvm") version "1.9.20" } else { id("org.jetbrains.kotlin.jvm") } }
方案3:排查主项目中插件的间接来源
如果想确认主项目中kotlin-jvm插件的来源,可在project_android根目录执行以下命令,查看类路径中的插件依赖:
./gradlew dependencies --configuration classpath
搜索org.jetbrains.kotlin:kotlin-gradle-plugin相关条目,就能找到插件的引入路径,确保project_lib单独构建时使用的版本与主项目一致,避免潜在的版本不兼容问题。
内容的提问来源于stack exchange,提问作者iH8WorkingWith.NetGraphics
相关产品推荐
相关产品推荐

