Jetpack Compose集成Room遇依赖错误:JVM目标版本不兼容
Room+KSP集成时JVM版本不兼容的解决办法
问题根源
KSP生成的Room代码目标JVM版本是17,但你的Java编译任务仍在使用1.8,版本不匹配导致构建冲突。
最优解决方案:统一全项目JVM目标版本
Jetpack Compose官方推荐使用JVM 17及以上,直接把Kotlin、Java编译和KSP的目标版本统一为17即可,具体配置如下:
1. 项目根目录build.gradle.kts
添加全局Kotlin编译配置:
plugins { id("com.android.application") version "xxxx" apply false id("org.jetbrains.kotlin.android") version "xxxx" apply false id("com.google.devtools.ksp") version "xxxx" apply false } subprojects { tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { jvmTarget = "17" } } }
2. 模块级(如app)build.gradle.kts
补充Java编译版本配置,同时确保Room与KSP版本兼容:
android { compileSdk = 34 defaultConfig { minSdk = 21 targetSdk = 34 } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } } dependencies { // Room依赖(版本需和KSP匹配,比如Room 2.6.1对应KSP 1.9.20-1.0.15) implementation("androidx.room:room-runtime:2.6.1") implementation("androidx.room:room-ktx:2.6.1") ksp("androidx.room:room-compiler:2.6.1") }
3. 清理并同步项目
执行File -> Sync Project with Gradle Files,然后运行./gradlew clean build彻底清理构建缓存并重新编译。
备选方案:改用KAPT替代KSP
如果暂时不想升级JVM版本(不推荐,Compose后续会逐步淘汰低版本支持),可以切换到KAPT编译Room:
- 替换插件:移除KSP插件,添加KAPT插件到模块级
build.gradle.kts顶部:
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") // 替换原KSP插件 }
- 替换编译依赖:把ksp依赖换成kapt:
dependencies { implementation("androidx.room:room-runtime:2.6.1") implementation("androidx.room:room-ktx:2.6.1") kapt("androidx.room:room-compiler:2.6.1") // 替换ksp为kapt }
注意:KAPT编译速度远慢于KSP,仅作为临时过渡方案。
内容的提问来源于stack exchange,提问作者kasimaru13
相关产品推荐
相关产品推荐

