SerializationComponentRegistrar 与此版本的编译器不兼容

Posted

技术标签:

【中文标题】SerializationComponentRegistrar 与此版本的编译器不兼容【英文标题】:SerializationComponentRegistrar is not compatible with this version of compiler 【发布时间】:2018-10-07 09:56:44 【问题描述】:

我在 AS 中收到此错误 - 即使我三次检查以选择有效的版本配对(kotlin 1.2.40 和序列化 0.5.0):

Error:Kotlin: [Internal Error] java.lang.IllegalStateException: The provided plugin org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar is not compatible with this version of compiler
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:186)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:119)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:418)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(K2JVMCompiler.kt:265)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:107)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$1.invoke(CompileServiceImpl.kt:399)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$1.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:920)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:950)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:919)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:397)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.AbstractMethodError: org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar.registerProjectComponents(Lcom/intellij/mock/MockProject;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:184)
    ... 33 more

【问题讨论】:

【参考方案1】:

在idea中检查你安装的Kotlin插件(工具>Kotlin>配置Kotlin插件更新)。必须与您的 build.gradle 文件中的相同。

【讨论】:

【参考方案2】:

有一个 IntelliJ / android Studio 插件专门用于 Kotlin 序列化支持,与主要的 Kotlin 插件分开。来自自述文件的Working in IntelliJ IDEA 部分:

因为序列化仍然是高度实验性的,所以它作为独立于“大”Kotlin IDEA 插件的工件提供。您可以从 TeamCity 构建页面下载其他 IDEA 插件,用于处理使用序列化的项目

它提供了指向该插件的最新 TeamCity 构建的链接,包括 Kotlin 1.2.40 的 this one。

由于他们目前仅通过 TeamCity 发布此插件,因此您必须通过转到 Preferences > Plugins > Install plugin from disk... 手动安装它。

对于使用 IntelliJ 而不是 Android Studio 的任何人,如果该插件不能解决问题,相同的自述文件会说:

尝试使用 gradle 运行构建:Settings - Build, Execution, Deployment - Build Tools - Gradle - Runner - 勾选 Delegate IDE build/run actions to gradle;或从控制台启动构建。

Github 上有一个关于此错误消息的 open ticket,可能也值得关注。

【讨论】:

我很确定这个那个插件抛出异常。至少,它适合我。

以上是关于SerializationComponentRegistrar 与此版本的编译器不兼容的主要内容,如果未能解决你的问题,请参考以下文章