KMM项目引入SQLDelight后出现Compose Compiler与Kotlin版本不兼容问题
问题根因
- SQLDelight 1.5.0及以上版本新增了Compose Multiplatform 扩展模块,其Gradle插件在构建时会默认引入匹配自身编译环境的Compose Compiler依赖,即便你的项目没有显式依赖SQLDelight的Compose扩展,插件也会将这个版本的Compose Compiler传递到项目的构建配置中,覆盖你自己声明的Compose版本。你在自己的项目配置文件中找不到对应版本声明,就是因为这个Compose Compiler版本属于SQLDelight Gradle插件的传递依赖,不属于你手动声明的配置范畴。
- 你使用的SQLDelight 1.5.2编译时绑定的是
1.0.1版本的Compose Compiler,该版本的Compose Compiler官方仅适配Kotlin 1.5.21,而你的项目Kotlin版本为1.5.30,因此触发了版本不兼容校验。
降级到1.4.2可正常编译的原因
SQLDelight 1.4.x版本尚未加入Compose相关的扩展模块,其Gradle插件不会传递引入Compose Compiler依赖,因此不会和你项目的Kotlin、Compose版本产生冲突。
其他可选解决方案
如果你需要使用1.5.x及更高版本的SQLDelight,无需降级也可解决问题:
在模块级build.gradle配置文件的composeOptions节点中,手动强制指定与你项目Kotlin版本匹配的Compose Compiler版本,覆盖SQLDelight传递的版本即可,参考配置(Kotlin DSL写法):
composeOptions { kotlinCompilerVersion = "对应Kotlin版本适配的Compose Compiler版本号" kotlinCompilerExtensionVersion = "对应Kotlin版本适配的Compose Compiler扩展版本号" }
也可以在gradle.properties中添加suppressKotlinVersionCompatibilityCheck=true临时关闭版本校验,但该方式存在编译运行异常的风险,不推荐在生产环境使用。
内容的提问来源于stack exchange,提问作者barryalan2633
相关产品推荐
相关产品推荐

