Jetpack Compose 预览 ClassNotFoundException(在 java 模块中定义类时)

Jetpack Compose preview ClassNotFoundException when class is defined in java module

提问人:EvilDuck 提问时间:7/6/2023 最后编辑:EvilDuck 更新时间:7/6/2023 访问量:199

问:

我的应用有一个使用 Jetpack Compose 的模块和另一个带有一些 Java 类的非 Android(纯 Java 库)模块。我遇到了一个问题,如果我使用在普通 Java/Kotlin 模块中定义的类,Jetpack Compose 预览会失败并出现渲染错误,并抛出:

java.lang.ClassNotFoundException: <ClassName>   at java.lang.ClassLoader.loadClass  at java.lang.ClassLoader.loadClass ...

Java 模块被添加到 Compose 模块的依赖中:

implementation project(':java-common')

一切都在设备上编译和运行。问题仅在预览版中出现。如果我在 Android 库模块中定义相同的类,那么预览也可以,所以我认为问题是该类是在 Java/Kotlin 模块中定义的。下面是库模块的构建文件:

plugins {
    id("java-library")
    id("org.jetbrains.kotlin.jvm")
}

kotlin {
    jvmToolchain(17)
}

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

我是否在库模块中缺少某些配置?(我真的不想把它变成 Android 模块,因为项目中还有其他一些非 Android 部分使用它)。

我正在将 AS Flamingo 与 AGP 8.0.2 和 Kotlin 1.8.22 一起使用。

android-studio android-jetpack-compose-preview

评论

0赞 Abhimanyu 7/6/2023
您是否在 Compose 的另一个模块中使用了 Java 模块中的类?
0赞 Abhimanyu 7/6/2023
您能分享有关设置的更多信息吗?
0赞 EvilDuck 7/6/2023
@Abhimanyu,没错,我有一个使用 compose 的模块和另一个包含实用程序类的 Java 模块。 每当我在撰写代码中引用实用程序类时,预览都会停止工作并抛出渲染错误。

答:

0赞 EvilDuck 7/6/2023 #1

最后,在花了一整天的时间挠头之后,通过重新导入项目解决了问题(完全清理,删除 .idea 文件夹)。