非Android项目如何设置Kotlin编译器版本解决Compose编译兼容问题
故障根因
配置的Kotlin 1.6.10未生效、实际编译用了1.6.21,通常由三类问题导致:
pluginManagement块未做版本锁定,Kotlin系列插件被全局规则或传递依赖升级到1.6.21- IDE开启了内置Kotlin编译器覆写项目配置的选项,绕过了Gradle指定的版本
- 构建缓存残留了之前高版本Kotlin的编译产物,触发版本错配
固定Kotlin编译器版本的可落地步骤
1. 锁死Gradle插件解析规则
在项目根目录的settings.gradle(Groovy语法)或settings.gradle.kts(Kotlin DSL)中添加插件版本强制规则,从插件层面阻断Kotlin版本被自动升级:
Kotlin DSL 配置示例
pluginManagement { repositories { gradlePluginPortal() mavenCentral() google() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } resolutionStrategy { eachPlugin { if (requested.id.id.startsWith("org.jetbrains.kotlin")) { useVersion("1.6.10") } } } }
Groovy 配置示例
pluginManagement { repositories { gradlePluginPortal() mavenCentral() google() maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" } } resolutionStrategy { eachPlugin { if (requested.id.id.startsWith("org.jetbrains.kotlin")) { useVersion("1.6.10") } } } }
2. 锁死依赖层面的Kotlin版本
在根目录构建脚本中给所有Kotlin相关依赖加强制版本规则,避免传递依赖拉高版本:
allprojects { configurations.all { resolutionStrategy { force("org.jetbrains.kotlin:kotlin-stdlib:1.6.10") force("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10") force("org.jetbrains.kotlin:kotlin-reflect:1.6.10") } } }
3. 关闭IDE的版本覆写配置
- 打开IDE设置面板,进入
Build, Execution, Deployment > Build Tools > Gradle,确认Gradle调用路径使用项目wrapper,不要选择IDE内置的Gradle发行版 - 进入
Build, Execution, Deployment > Compiler > Kotlin Compiler,将Kotlin编译器版本设置为使用项目配置,不要手动指定IDE内置的1.6.21版本 - 执行
./gradlew clean清空构建缓存,再通过File > Invalidate Caches清空IDE缓存后重启,确保旧版本配置完全清除
非Android项目自定义Compose编译器版本方法
如果后续需要升级Kotlin版本,不需要依赖Android端的composeOptions块,直接在构建脚本的Compose配置块中指定编译器版本即可:
compose { kotlinCompilerPlugin.set("1.2.0-beta03") }
注意:Compose Multiplatform 1.1.0官方仅兼容Kotlin 1.6.10,锁定版本后可彻底避免IDE或依赖自动升级Kotlin导致的兼容性问题,后续升级版本前先核对二者的兼容对应关系即可。
内容的提问来源于stack exchange,提问作者Tenfour04
相关产品推荐
相关产品推荐

