mamoe / mirai-console

mirai 的高效率 QQ 机器人控制台

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

向java类里添加@Serializible也不能使其在AutoSavaPluginData里允许使用

NoMathExpectation opened this issue · comments

如标题,我已经向java类里填加了@Serializible,启动时仍然报错:

2021-11-30 23:13:45 E/main: Failed to init MiraiConsole.
net.mamoe.mirai.console.internal.util.ServiceLoadException: Could not load service NoMathExpectation.NMEboot.Main.
        at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:60)
        at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadAllServices(PluginServiceHelper.kt:42)
        at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:76)
        at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl$extractPlugins$findAllInstances$2.invoke(BuiltInJvmPluginLoaderImpl.kt:71)
        at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
        at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:314)
        at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
        at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
        at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:214)
        at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:307)
        at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303)
        at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:786)
        at kotlin.sequences.SequencesKt___SequencesKt.toSet(_Sequences.kt:827)
        at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.extractPlugins(BuiltInJvmPluginLoaderImpl.kt:95)
        at net.mamoe.mirai.console.plugin.loader.AbstractFilePluginLoader.listPlugins(FilePluginLoader.kt:51)
        at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.listPlugins(JvmPluginLoader.kt)
        at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.listAndSortAllPlugins(PluginManagerImpl.kt:186)
        at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.findAndSortAllPluginsUsingBuiltInLoaders(PluginManagerImpl.kt:130)
        at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders$mirai_console(PluginManagerImpl.kt:140)
        at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:163)
        at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:276)
        at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:152)
        at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:151)
        at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:47)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.itxtech.mcl.Utility.bootMirai(Utility.java:83)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:138)
        at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:226)
        at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1692)
        at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:1013)
        at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:109)
        at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:412)
        at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3578)
        at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:107)
        at org.mozilla.javascript.ArrowFunction.call(ArrowFunction.java:43)
        at org.mozilla.javascript.InterfaceAdapter.invokeImpl(InterfaceAdapter.java:155)
        at org.mozilla.javascript.InterfaceAdapter.lambda$invoke$0(InterfaceAdapter.java:105)
        at org.mozilla.javascript.Context.call(Context.java:554)
        at org.mozilla.javascript.ContextFactory.call(ContextFactory.java:522)
        at org.mozilla.javascript.InterfaceAdapter.invoke(InterfaceAdapter.java:105)
        at org.mozilla.javascript.jdk18.VMBridge_jdk18$1.invoke(VMBridge_jdk18.java:126)
        at com.sun.proxy.$Proxy4.run(Unknown Source)
        at org.itxtech.mcl.script.ScriptManager.phaseBoot(ScriptManager.java:106)
        at org.itxtech.mcl.Loader.lambda$start$3(Loader.java:176)
        at org.itxtech.mcl.Loader.tryCatching(Loader.java:145)
        at org.itxtech.mcl.Loader.start(Loader.java:176)
        at org.itxtech.mcl.Loader.main(Loader.java:68)
Caused by: java.lang.ExceptionInInitializerError
        at NoMathExpectation.NMEboot.Main.<init>(Main.java:27)
        at NoMathExpectation.NMEboot.Main.<clinit>(Main.java:18)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Unknown Source)
        at net.mamoe.mirai.console.internal.util.PluginServiceHelper.loadService(PluginServiceHelper.kt:51)
        ... 53 more
Caused by: kotlinx.serialization.SerializationException: Serializer for class 'CardUser' is not found.
Mark the class as @Serializable or provide the serializer explicitly.
        at kotlinx.serialization.internal.Platform_commonKt.serializerNotRegistered(Platform.common.kt:91)
        at kotlinx.serialization.SerializersKt__SerializersKt.serializer(Serializers.kt:155)
        at kotlinx.serialization.SerializersKt.serializer(Unknown Source)
        at net.mamoe.mirai.console.internal.data.SerializerHelperKt.serializerMirai$serializerByKTypeImpl(serializerHelper.kt:51)
        at net.mamoe.mirai.console.internal.data.SerializerHelperKt.serializerMirai(serializerHelper.kt:87)
        at net.mamoe.mirai.console.internal.data.SerializerHelperKt.serializerMirai$serializerByKTypeImpl(serializerHelper.kt:54)
        at net.mamoe.mirai.console.internal.data.SerializerHelperKt.serializerMirai(serializerHelper.kt:87)
        at net.mamoe.mirai.console.internal.data.ValueFromKTypeImplKt.valueFromKTypeImpl(valueFromKTypeImpl.kt:74)
        at net.mamoe.mirai.console.data.PluginDataKt.valueFromKType(PluginData.kt:247)
        at net.mamoe.mirai.console.data.PluginDataKt.valueImpl(PluginData.kt:230)
        at NoMathExpectation.NMEboot.RDLounge.CardSystem.UserData.<clinit>(UserData.kt:12)
        ... 58 more

附相关类:

//CardUser.java
//package省略

import kotlinx.serialization.Serializable;

@Serializable
public class CardUser
{
    public int test;

    public CardUser()
    {
        test = 114514;
    }
}
//UserData.kt
//package省略

import net.mamoe.mirai.console.data.AutoSavePluginData
import net.mamoe.mirai.console.data.value

object UserData : AutoSavePluginData("cardUser")
{
    var user : Map<Long, CardUser> by value()
}

@Serializible 会被 Kotlin 编译器处理, 为 class 生成 Serializer. 该功能不支持 Java. 建议配置用 Kotlin 写