【发布时间】: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.71 和1.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