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 与此版本的编译器不兼容的主要内容,如果未能解决你的问题,请参考以下文章