【问题标题】:Kotlin 1.5.20 breaks kapt for dagger/moshiKotlin 1.5.20 打破了 dagger/moshi 的 kapt
【发布时间】:2021-08-31 14:20:57
【问题描述】:

我已将 kotlin 从 1.4.31 更新到版本 1.5.20。这导致了 kapt 处理过程中的错误。 dagger 和 moshi 的 Kapt 失败,错误输出与元数据/kotlin 运行时非常相似

对于匕首:

Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ..
    at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:45)
    ... 28 more
Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.NoSuchMethodError: 'void kotlinx.metadata.jvm.KotlinClassHeader.<init>(java.lang.Integer, int[], java.lang.String[], java.lang.String[], java.lang.String, java.lang.String, java.lang.Integer)'
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:992)
    ..
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
    ... 34 more
Caused by: java.lang.NoSuchMethodError: 'void kotlinx.metadata.jvm.KotlinClassHeader.<init>(java.lang.Integer, int[], java.lang.String[], java.lang.String[], java.lang.String, java.lang.String, java.lang.Integer)'
    at dagger.internal.codegen.kotlin.KotlinMetadata.metadataOf(KotlinMetadata.java:202)
    ..
    at jdk.compiler/com.sun.tools.javac.code.Symbol$VarSymbol.accept(Symbol.java:1576)

对于莫希:

Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ..
    at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:45)
    ... 33 more
Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.NoSuchMethodError: 'void kotlin.jvm.internal.FunctionReferenceImpl.<init>(int, java.lang.Class, java.lang.String, java.lang.String, int)'
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(Java
    ..
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
    ... 40 more
Caused by: java.lang.NoSuchMethodError: 'void kotlin.jvm.internal.FunctionReferenceImpl.<init>(int, java.lang.Class, java.lang.String, java.lang.String, int)'
    at com.squareup.moshi.kotlinpoet.classinspector.elements.ElementsClassInspector$containerData$propertyData$3$getterData$1$method$1.<init>(ElementsClassInspector.kt)
    ..
    at com.squareup.moshi.kotlin.codegen.MetadataKt.targetType(metadata.kt:208)

因此,任何使用 kapt 的依赖项都可能会失败并出现非常相似的错误

我预计与 kotlin 运行时/metatada 库等有一些版本冲突,但没有找到。我在androidDependencies 任务输出中看到的是,只有1.5.21 用于运行时,还有1.3.711.4.20 某处,但它们由依赖求解器更新。
我能想象到的唯一原因是 kotlin 的向后兼容性因旧版本的某些指令而损坏

我们使用:

JVM - 11.0.8
Kotlin - 1.5.21
Gradle - 6.5
Android gradle 插件 - 4.1.3(7.0.0 也无济于事)
匕首 - 2.38.1
莫希 - 1.12.0
房间-2.3.0

关于KotlinClassHeader 构造函数错误,我注意到kotlinx-metadata-jvm:0.3.0 依赖项提供了一个新的构造函数,并且与0.2.0 相比立即弃用了它。会不会导致这个问题?

这个问题很相似:https://github.com/google/dagger/issues/2717

感谢任何建议

【问题讨论】:

    标签: android kotlin dagger-2 moshi


    【解决方案1】:

    kapt.workers.isolation=process 设置会导致问题。

    通过删除该行来修复构建。 但我仍然不知道问题的根源

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 2022-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多