Jetpack Compose预览调用Java模块类时触发ClassNotFoundException
解决Jetpack Compose预览无法加载纯Java/Kotlin库类的问题
问题原因
Jetpack Compose预览的类加载机制与应用正常运行时存在差异,在AGP 8.x版本环境下,纯JVM库默认启用了Java模块系统(JPMS)的路径推断,导致预览进程的类加载器无法识别库中的类,最终抛出ClassNotFoundException。
解决方案
在纯Java/Kotlin库模块的build.gradle.kts中添加禁用模块路径推断的配置,让库以传统类路径方式被加载:
plugins { id("java-library") id("org.jetbrains.kotlin.jvm") } kotlin { jvmToolchain(17) } java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 // 禁用JPMS模块路径推断,让类以传统方式加载 modularity.inferModulePath = false }
补充处理(若上述方案无效)
在Compose所在的Android模块中,显式为预览任务添加纯JVM库的依赖,确保预览进程的classpath包含库的编译产物:
android { // 保留原有配置 buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.4.7" // 需与Kotlin 1.8.22版本匹配 } // 添加预览专属依赖配置 preview { dependencies { implementation project(':java-common') } } }
内容的提问来源于stack exchange,提问作者EvilDuck
相关产品推荐
相关产品推荐

