Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在 idea 直接运行 RunTerminal 时出现大量 NoClassDefError 等错误 #2055

Closed
chachako opened this issue May 24, 2022 · 12 comments · Fixed by #2058
Closed

在 idea 直接运行 RunTerminal 时出现大量 NoClassDefError 等错误 #2055

chachako opened this issue May 24, 2022 · 12 comments · Fixed by #2058
Labels
M 优先级: 主要 s:idea 子系统: mirai-console-intellij t:problem 类型: 不容易归类为特性或 bug 的综合问题
Milestone

Comments

@chachako
Copy link

chachako commented May 24, 2022

问题描述

插件依赖了高版本的 Ktor 与 Serialization 后运行 test 会报错:

suspend fun main() {
  MiraiConsoleTerminalLoader.startAsDaemon()

  Plugin.apply {
    load()
    enable()
  }

  MiraiConsole.job.join()
}

复现

如问题所述。

mirai-core 版本

2.11.0

bot-protocol

ANDROID_PHONE

其他组件版本

Ktor 版本为 2.0.1
Serialization 为 1.3.3
Kotlin 版本为 1.6.21

系统日志

2022-05-24 19:53:14 I/main: Starting mirai-console...
2022-05-24 19:53:14 I/main: Backend: version 2.11.0, built on 2022-05-19 22:08:40.
2022-05-24 19:53:14 I/main: Frontend Terminal: version 2.11.0, provided by Mamoe Technologies
2022-05-24 19:53:14 I/main: Welcome to visit https://mirai.mamoe.net/
2022-05-24 19:53:14 E/main: Failed to init MiraiConsole.
java.util.ServiceConfigurationError: net.mamoe.mirai.IMirai: Provider net.mamoe.mirai.internal.MiraiImpl could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:272)
	at net.mamoe.mirai.Mirai.findMiraiInstance(IMirai.kt:360)
	at net.mamoe.mirai._MiraiInstance.get(IMirai.kt:354)
	at net.mamoe.mirai.Mirai.getInstance(IMirai.kt:42)
	at net.mamoe.mirai.internal.message.MessageSerializersImpl.getSerializersModule(MessageSerializersImpl.kt:196)
	at net.mamoe.mirai.message.MessageSerializers$INSTANCE.getSerializersModule(MessageSerializers.kt)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$createYaml$1.invoke(MultiFilePluginDataStorageImpl.kt:101)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$createYaml$1.invoke(MultiFilePluginDataStorageImpl.kt:99)
	at net.mamoe.yamlkt.YamlKt.Yaml(Yaml.kt:242)
	at net.mamoe.yamlkt.YamlKt.Yaml$default(Yaml.kt:240)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.createYaml(MultiFilePluginDataStorageImpl.kt:99)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.load(MultiFilePluginDataStorageImpl.kt:40)
	at net.mamoe.mirai.console.internal.data.builtins.ConsoleDataScopeImpl.addAndReloadConfig(ConsoleDataScopeImpl.kt:41)
	at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:160)
	at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:444)
	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:159)
	at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:158)
	at chachako.anya.TestConsoleKt.main(TestConsole.kt:47)
	at chachako.anya.TestConsoleKt$main$3.invoke(TestConsole.kt)
	at chachako.anya.TestConsoleKt$main$3.invoke(TestConsole.kt)
	at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
	at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
	at chachako.anya.TestConsoleKt.main(TestConsole.kt)
Caused by: java.util.ServiceConfigurationError: net.mamoe.mirai.IMirai: Provider net.mamoe.mirai.internal.MiraiImpl could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:272)
	at net.mamoe.mirai.Mirai.findMiraiInstance(IMirai.kt:360)
	at net.mamoe.mirai._MiraiInstance.get(IMirai.kt:354)
	at net.mamoe.mirai.Mirai.getInstance(IMirai.kt:42)
	at net.mamoe.mirai.internal.message.MessageSerializersImpl.getSerializersModule(MessageSerializersImpl.kt:196)
	at net.mamoe.mirai.internal.message.MessageSerializersImpl.registerSerializer(MessageSerializersImpl.kt:202)
	at net.mamoe.mirai.message.MessageSerializers$INSTANCE.registerSerializer(MessageSerializers.kt)
	at net.mamoe.mirai.internal.MiraiImpl.<clinit>(MiraiImpl.kt:74)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 27 more
Caused by: java.lang.NoClassDefFoundError: io/ktor/client/features/HttpTimeout
	at net.mamoe.mirai.internal.MiraiImpl$Http$1.invoke(MiraiImpl.kt:146)
	at net.mamoe.mirai.internal.MiraiImpl$Http$1.invoke(MiraiImpl.kt:145)
	at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:40)
	at net.mamoe.mirai.internal.MiraiImpl.<init>(MiraiImpl.kt:145)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 43 more
Caused by: java.lang.ClassNotFoundException: io.ktor.client.features.HttpTimeout
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 53 more

2022-05-24 19:53:14 I/stdout: 2022-05-24 19:53:14 W/MultiFilePluginDataStorageImpl: Could not save AutoLogin in YAML format due to exception in YAML encoder. Please report this exception and relevant configurations to https://github.com/mamoe/mirai/issues/new/choose
2022-05-24 19:53:14 I/stdout: java.util.ServiceConfigurationError: net.mamoe.mirai.IMirai: Provider net.mamoe.mirai.internal.MiraiImpl could not be instantiated
2022-05-24 19:53:14 I/stdout: 	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
2022-05-24 19:53:14 I/stdout: 	at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:272)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.Mirai.findMiraiInstance(IMirai.kt:360)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai._MiraiInstance.get(IMirai.kt:354)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.Mirai.getInstance(IMirai.kt:42)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.internal.message.MessageSerializersImpl.getSerializersModule(MessageSerializersImpl.kt:196)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.message.MessageSerializers$INSTANCE.getSerializersModule(MessageSerializers.kt)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$createYaml$1.invoke(MultiFilePluginDataStorageImpl.kt:101)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$createYaml$1.invoke(MultiFilePluginDataStorageImpl.kt:99)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.yamlkt.YamlKt.Yaml(Yaml.kt:242)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.yamlkt.YamlKt.Yaml$default(Yaml.kt:240)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.createYaml(MultiFilePluginDataStorageImpl.kt:99)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.store(MultiFilePluginDataStorageImpl.kt:72)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.data.AutoSavePluginData.doSave(AutoSavePluginData.kt:117)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.data.AutoSavePluginData.save(AutoSavePluginData.kt:109)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.data.AutoSavePluginData.access$save(AutoSavePluginData.kt:34)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.data.AutoSavePluginData$onInit$4.invoke(AutoSavePluginData.kt:73)
2022-05-24 19:53:14 I/stdout: 	at net.mamoe.mirai.console.data.AutoSavePluginData$onInit$4.invoke(AutoSavePluginData.kt:73)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1391)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1519)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:935)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:27)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1155)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1519)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:906)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:863)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100)
2022-05-24 19:53:14 I/stdout: 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
2022-05-24 19:53:14 I/stdout: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
2022-05-24 19:53:14 I/stdout: Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.mamoe.mirai.internal.MiraiImpl
2022-05-24 19:53:14 I/stdout: 	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2022-05-24 19:53:14 I/stdout: 	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
2022-05-24 19:53:14 I/stdout: 	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
2022-05-24 19:53:14 I/stdout: 	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
2022-05-24 19:53:14 I/stdout: 	... 39 more
2022-05-24 19:53:14 I/stdout: 
2022-05-24 19:53:14 E/main: Exception in coroutine ConsoleBuiltInPluginConfigHolder
java.lang.IllegalStateException: Exception while saving net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig@4a98827d, saveName=AutoLogin
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.store(MultiFilePluginDataStorageImpl.kt:92)
	at net.mamoe.mirai.console.data.AutoSavePluginData.doSave(AutoSavePluginData.kt:117)
	at net.mamoe.mirai.console.data.AutoSavePluginData.save(AutoSavePluginData.kt:109)
	at net.mamoe.mirai.console.data.AutoSavePluginData.access$save(AutoSavePluginData.kt:34)
	at net.mamoe.mirai.console.data.AutoSavePluginData$onInit$4.invoke(AutoSavePluginData.kt:73)
	at net.mamoe.mirai.console.data.AutoSavePluginData$onInit$4.invoke(AutoSavePluginData.kt:73)
	at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1391)
	at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1519)
	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
	at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
	at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:935)
	at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:27)
	at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1155)
	at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1519)
	at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
	at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
	at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:906)
	at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:863)
	at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828)
	at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Caused by: java.util.ServiceConfigurationError: net.mamoe.mirai.IMirai: Provider net.mamoe.mirai.internal.MiraiImpl could not be instantiated
	at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at kotlin.collections.CollectionsKt___CollectionsKt.firstOrNull(_Collections.kt:272)
	at net.mamoe.mirai.Mirai.findMiraiInstance(IMirai.kt:360)
	at net.mamoe.mirai._MiraiInstance.get(IMirai.kt:354)
	at net.mamoe.mirai.Mirai.getInstance(IMirai.kt:42)
	at net.mamoe.mirai.internal.message.MessageSerializersImpl.getSerializersModule(MessageSerializersImpl.kt:196)
	at net.mamoe.mirai.message.MessageSerializers$INSTANCE.getSerializersModule(MessageSerializers.kt)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$store$2$1.invoke(MultiFilePluginDataStorageImpl.kt:83)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl$store$2$1.invoke(MultiFilePluginDataStorageImpl.kt:82)
	at kotlinx.serialization.json.JsonKt.Json(Json.kt:138)
	at kotlinx.serialization.json.JsonKt.Json$default(Json.kt:136)
	at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.store(MultiFilePluginDataStorageImpl.kt:82)
	... 25 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.mamoe.mirai.internal.MiraiImpl
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
	... 38 more

网络日志

No response

补充信息

除了降级外有什么临时解决这个办法的建议吗?将 test 的 runtime-classpath 替换为 shadowJar 并且 relocate 相关依赖包名是否能解决?

@cssxsh
Copy link
Contributor

cssxsh commented May 24, 2022

建议是 用 remote dehug,隔离类环境

@chachako
Copy link
Author

建议是 用 remote dehug,隔离类环境

remote debug 是指丢服务器吗

@cssxsh
Copy link
Contributor

cssxsh commented May 24, 2022

remote debug

Remote JVM Debug

准备一份 mcl 作为正常运行环境,然后 mcl 启动时添加 java 参数, 8089是端口,你可以改
-Xdebug -Xrunjdwp,transport=dt_socket,server=y,suspend=y,address=8089
mcl 启动之后会等待 Remote Debug 链接

然后在 idea 里 添加 一个 Remote Debug ,端口是 上面 的 8089, 启动测试,
你就可以打断点查看正常运行环境下的运行状态了

实际 gradle/maven 的 test 的 环境和 mlc运行环境 还是有不小差异,只能做单元测试

@chachako
Copy link
Author

chachako commented May 24, 2022

我没有过这方面的知识,看起来有点麻烦,我研究一下 😧

@Karlatemp
Copy link
Member

由于直接在 test 启动和实际运行环境有很大差异, 目前我们有计划提供一种更好的测试环境. 目前最好的方法就是如 cssxsh 所说使用 Remote Debug 代替.

可以使用 buildPlugin 得到一个完整的 console 插件然后进行测试

@Karlatemp Karlatemp changed the title 插件与控制台的 Ktor 和 Serialization 依赖冲突 在 idea 直接运行 RunTerminal 时出现大量 NoDefClassError 等错误 May 24, 2022
@Karlatemp Karlatemp changed the title 在 idea 直接运行 RunTerminal 时出现大量 NoDefClassError 等错误 在 idea 直接运行 RunTerminal 时出现大量 NoClassDefError 等错误 May 24, 2022
@chachako
Copy link
Author

刚刚尝试了将版本降级但是发现 ktor 2.x 和 1.6.7 的 api 差的太多了。

最后通过 gradle task 简单地移动插件到 mcl 环境测试暂时解决了,这对于日常运行测试而言应该是足够了,需要调试时我再尝试一下 remote debug.

目前我们有计划提供一种更好的测试环境.

期待快点到来,有一种方便的测试环境感觉会很好,现在我尝试的这种方式太痛苦了
image

@chachako
Copy link
Author

chachako commented May 24, 2022

image
另外不清楚是不是我的使用有问题,为什么 auto-login 发生在 onEnable 之后?之前通过 RunTerminal 运行时不会这样,或者说有什么像 kotlin.StateFlow 一样的东西能响应式地拿到 Bot 实例吗?

@Him188 Him188 added M 优先级: 主要 t:problem 类型: 不容易归类为特性或 bug 的综合问题 s:idea 子系统: mirai-console-intellij labels May 24, 2022
@Him188 Him188 added this to the 2.12.0-RC milestone May 24, 2022
@cssxsh
Copy link
Contributor

cssxsh commented May 24, 2022

image 另外不清楚是不是我的使用有问题,为什么 auto-login 发生在 onEnable 之后?之前通过 RunTerminal 运行时不会这样,或者说有什么像 kotlin.StateFlow 一样的东西能响应式地拿到 Bot 实例吗?

这就是 真实运行环境和 RunTerminal 有差异的地方了,真实运行环境 里 插件加载会在 MiraiConsole 初始化时完成(加载plugins文件夹),MiraiConsole 初始过程中也会会完成 auto-login,

RunTerminal 里 是手动 onEnable,在 MiraiConsole 初始化之后

Bot 实例你可以监听 BotLoginEvent

@chachako
Copy link
Author

这就是 真实运行环境和 RunTerminal 有差异的地方了,真实运行环境 里 插件加载会在 MiraiConsole 初始化时完成(加载plugins文件夹),MiraiConsole 初始过程中也会会完成 auto-login,

RunTerminal 里 是手动 onEnable,在 MiraiConsole 初始化之后

Bot 实例你可以监听 BotLoginEvent

明白了!


另外我发现换到真实环境后,发现 ktor-core 的依赖不会下载,导致引发 java.lang.NoClassDefFoundError: io/ktor/client/plugins/HttpClientPlugin, 这个是为什么呢,其他依赖看起来都下载了

  • 下载的依赖:
    image

  • Gradle Implementation 的依赖:
    image

@Karlatemp
Copy link
Member

#2051

@chachako
Copy link
Author

#2051

使用 Ktor 后的坑好多,摸索了一会有点晕了。 有什么方式可以使用最新的代码吗...nexus 中似乎不存在 mirai 的 snapshot 版本。

我发现即使通过 shadowLink 把 core 打包进去了也一样会报错 NoSuchMethod, 目前貌似只能通过 configureShadowrelocate 解决?

  • 另外 buildPluginbuildPluginLegacy 的关系是?文档并没有详细指出区别,然后尝试后发现前者不会打包 shadowLink 的某些依赖 (如 ktor-core),但后者则会

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
M 优先级: 主要 s:idea 子系统: mirai-console-intellij t:problem 类型: 不容易归类为特性或 bug 的综合问题
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants