自从将 kotlin 更新到 1.6.10 和 room 2.4.1 后无法编译

M3-*_*n50 8 gradle android-studio android-room

自从我升级到 Kotlin 1.6.10 并将 room 升级到 2.4.0 后,我收到了错误。该错误尚不清楚,所以我真的不知道从哪里开始寻找。

任务“:app:kaptDebugKotlin”执行失败。执行 org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction java.lang.reflect.InitationTargetException 时发生失败(无错误消息)

尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --scan 运行以获得完整的见解。

我猜测我的实体中有一些不兼容的东西,但是当降级时一切都可以完美地工作。我的问题是:我怎样才能发现问题所在?对我来说,这些错误是相当模糊的。

当我运行 gradlew --scan 时,它说我的 JVM 仍然是 1.8,但我已经将所有地方更新为 11。

编辑:我已经通过更改 org.gradle.java.home 属性设法强制我的 Gradle 使用 11。现在它给了我以下错误:

 A failure occurred while executing
 org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
  (No message provided)
    (No message provided)
      java.lang.IllegalArgumentException: <nulltype> cannot be represented as a Class<?>.
       <nulltype> cannot be represented as a Class<?>.
Run Code Online (Sandbox Code Playgroud)

编辑2

我在另一个 StackOverflow 线程中读到我应该将 AS 更新到我所做的最新补丁。不幸的是,这没有帮助。

编辑3

房间版本(2.4.1)似乎也是问题的一部分。当降级除房间以外的所有内容时,它仍然是一个错误。如果我尝试使用 kotlin 1.5.31、room 2.3.0 和 compose 1.0.5 运行,它运行良好。

编辑4

升级到 room 2.4.2 并添加 KSP 后,我收到以下错误:

[ksp] [MissingType]: Element 'be.tradecom.kraken.objects.parts.Part' references a type that is not present - be.tradecom.kraken.objects.parts.Part
Run Code Online (Sandbox Code Playgroud)

在搜索此错误时,我只得到 1 个有相同问题并通过升级到 Kotlin 1.6.0 修复该问题的人的结果。我尝试从 1.6.10 降级到 1.6.0,但 compose 1.1.0 需要 1.6.10。

我删除了第一个错误的大部分内容,因为我达到了字符限制,而且我认为这不再重要了。

M3-*_*n50 1

所以一年后我不得不再次从事这个项目。

我发现这些[MissingType]错误仅发生在具有SerializedName注释的实体中。我的项目设置了多个模块,并且com.google.code.gson:gson未导入到包含数据库实体的模块中。

最终将其添加到该 build.grade 后,该项目将再次编译。