【问题标题】:Receiving NoClassDefFoundError when invoking generated serializer() method调用生成的 serializer() 方法时收到 NoClassDefFoundError
【发布时间】:2020-07-30 06:22:12
【问题描述】:

尝试在 @Serializable 类上调用 Foo.serializer() 方法时,我收到了 NoClassDefFoundError

这是我的测试用例:

@Serializable
data class Foo(val data: String)

val jsonString = json.stringify(
  Foo.serializer(), // <= Error happens here
  Foo(data = "foo")
)

尝试运行代码会导致以下堆栈跟踪:

java.lang.NoSuchMethodError: 'void kotlinx.serialization.internal.SerialClassDescImpl.<init>(java.lang.String, kotlinx.serialization.internal.GeneratedSerializer, int)'
    at com.example.Foo$$serializer.<clinit>(Foo.kt:7)
    at com.example.Foo$Companion.serializer(Foo.kt)

【问题讨论】:

    标签: kotlin kotlinx.serialization kotlinx


    【解决方案1】:

    这是 Kotlin 和 Kotlinx.serialization 之间版本不匹配的结果,因为它们相对紧密耦合。就我而言,我使用的是 Kotlin 1.3.71 和 kotlinx.serialization 0.14.0,因此解决方案是将 kotlinx.serialization 升级到 0.20.0。

    【讨论】:

    • 在我的情况下,我遇到了同样的问题,为了解决它,我将 Kotlin 版本和 kotlinx.serialization 版本设置为“1.3.70”
    • 这似乎对某些人来说已经解决了,但即使在使用 1.3.72 和 0.20.0 之后问题仍然存在。确保生成一个干净的构建(作为现在的解决方法) - github.com/Kotlin/kotlinx.serialization/issues/…
    • 太棒了,升级 kotlinx.serialization 到 0.20.0 和 Kotlin 1.3.71 解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2017-07-22
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多