Gradle Catalogs环境下Room与KSP插件兼容配置报错
Gradle Version Catalogs集成Room组件时的类型转换异常问题
问题背景
在使用Gradle Version Catalogs特性的Android项目中集成Room组件,已知Room自2.3.0-beta02版本起官方支持该特性,但配置后编译时出现类型转换异常,无法正常构建。
当前配置内容
libs.versions.toml
[versions] agp = "8.1.2" // ... androidx-room = "2.3.0-beta02" com-google-devtools-ksp = "1.8.10-1.0.9" [libraries] # Implementations core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" } // ... androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "androidx.room" } androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "androidx.room" } androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "androidx.room" } [plugins] com-android-application = { id = "com.android.application", version.ref = "agp" } // ... com-google-devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "com-google-devtools-ksp" } [bundles]
:app模块build.gradle.kts
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.com.android.application) // .. alias(libs.plugins.com.google.devtools.ksp) } android { // ... defaultConfig { // ... minSdk = 24 // noinspection EditedTargetSdkVersion targetSdk = 34 versionCode = 1 versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { viewBinding = true } } dependencies { implementation(libs.core.ktx) // ... implementation(libs.androidx.room.ktx) implementation(libs.androidx.room.runtime) ksp(libs.androidx.room.compiler) // Test androidTestImplementation(libs.androidx.test.ext.junit) androidTestImplementation(libs.espresso.core) // Test Android testImplementation(libs.junit) testImplementation(libs.io.insert.koin.test) }
根目录build.gradle.kts
@Suppress("DSL_SCOPE_VIOLATION") plugins { alias(libs.plugins.com.android.application) apply false /// ... alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) apply false } true // Needed to make the Suppress annotation work for the plugins block
编译错误信息
FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':app'. > class org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated cannot be cast to class org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData (org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6404c62a; org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @3df7681e) (...) * Exception is: org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'. (...) org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49) Caused by: java.lang.ClassCastException: class org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated cannot be cast to class org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData (org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6404c62a; org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @3df7681e) (...)
同时收到的提示:
class org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated cannot be cast to class org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData (org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6404c62a; org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @3df7681e) class org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated cannot be cast to class org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData (org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation_Decorated is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @6404c62a; org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData is in unnamed module of loader org.gradle.internal.classloader.VisitableURLClassLoader @3df7681e) Gradle的依赖缓存可能已损坏(这种情况有时会在网络连接超时后发生。) 重新下载依赖并同步项目(需要网络) Gradle构建进程(守护进程)的状态可能已损坏。停止所有Gradle守护进程可能会解决此问题。 停止Gradle构建进程(需要重启) 你的项目可能正在使用与项目中其他插件或项目要求的Gradle版本不兼容的第三方插件。 如果Gradle进程损坏,你也可以尝试关闭IDE,然后终止所有Java进程。
解决方案
这个类型转换异常的核心原因是KSP版本与AGP、Kotlin版本不匹配,同时Room 2.3.0-beta02属于较旧版本,与当前使用的AGP 8.1.2兼容性较差。
步骤1:升级Room到兼容AGP 8.x的版本
Room 2.3.0-beta02是2021年的版本,完全不支持AGP 8.x。建议升级到最新稳定版或至少支持AGP 7.x+的版本,修改libs.versions.toml:
[versions] androidx-room = "2.6.1" # 最新稳定版,兼容AGP 8.x
步骤2:匹配KSP与Kotlin、AGP版本
KSP版本必须与项目使用的Kotlin版本严格对应。AGP 8.1.2对应的Kotlin版本应为1.8.22,调整libs.versions.toml:
[versions] com-google-devtools-ksp = "1.8.22-1.0.11" # 对应Kotlin 1.8.22的KSP版本
同时确保项目中使用的Kotlin版本与AGP 8.1.2匹配(AGP 8.1.x要求Kotlin版本在1.8.0-1.8.22之间)。
步骤3:清理Gradle缓存并重启进程
- 执行
./gradlew clean清理构建产物 - 删除项目根目录下的
.gradle文件夹 - 停止所有Gradle守护进程:
./gradlew --stop - 重启Android Studio并重新同步项目
验证依赖配置
确保Room的依赖配置正确,使用KSP时保持现有依赖声明即可:
implementation(libs.androidx.room.ktx) implementation(libs.androidx.room.runtime) ksp(libs.androidx.room.compiler)
内容的提问来源于stack exchange,提问作者Leonardo Sibela
相关产品推荐
相关产品推荐

