如何在Gradle子项目中指定与根项目不同版本的Kotlin插件
结论先行
Gradle多项目构建不支持给单个子项目单独指定Kotlin Gradle插件版本。Kotlin插件属于构建期全局加载的组件,在整个构建初始化阶段只会加载一次classpath,子项目单独声明不同版本既不会生效,还会触发类冲突报错。
可落地的解决方法
- 全局回退Kotlin版本适配compose-jb
直接把根目录./build.gradle.kts里的Kotlin插件版本改成compose-jb兼容的1.6.x最新稳定版(比如1.6.21),所有子项目统一用这个版本。如果其余子项目没有强依赖Kotlin 1.7.0的专属特性,优先选这个方案,配置成本最低,不会出奇怪的兼容问题。 - 用复合构建隔离版本冲突
如果其他子项目必须用Kotlin 1.7.0,就把用compose-jb的模块拆成独立的Gradle工程,和主工程做构建隔离:- 把compose相关代码迁移到独立目录,给这个独立工程单独配置1.6.x版本的Kotlin和对应兼容的compose-jb依赖
- 在主工程的
settings.gradle.kts里通过includeBuild指令引入这个独立工程
这种模式下两个工程的构建classpath完全独立,不会出现Kotlin版本冲突,主工程也能正常依赖该compose模块的构建产物。
- 等官方兼容版本发布
等compose-jb推出适配Kotlin 1.7.0的正式版本后,直接升级compose-jb依赖即可,不需要调整现有Kotlin版本配置,缺点是需要匹配官方发版节奏,不适合紧急排期的开发场景。
避坑提醒:不要尝试在子项目的buildscript配置里单独声明低版本Kotlin插件的classpath,这种写法覆盖不了根项目已经加载的1.7.0版本插件,运行时还是会用高版本插件加载compose-jb,依旧会抛版本不兼容异常。
内容的提问来源于stack exchange,提问作者Taskeren
相关产品推荐
相关产品推荐

