Closed ArgonarioD closed 1 year ago
为啥要在插件里塞一个大型框架
为啥要在插件里塞一个大型框架
框架本身设计和生态都很好,开发起来爽,资源占用也还可以接受(
为啥要在插件里塞一个大型框架
框架本身设计和生态都很好,开发起来爽,资源占用也还可以接受(
那也应该是反过来,spring 里加载 mirai,而不是 mirai 加载 spring
为啥要在插件里塞一个大型框架
框架本身设计和生态都很好,开发起来爽,资源占用也还可以接受(
那也应该是反过来,spring 里加载 mirai,而不是 mirai 加载 spring
emmmmm,为什么这样说呢? 我这样做是希望能够做到jvm插件对于console的目录结构无侵入式改变,并且
不过讨论应用场景的问题会不会有点跑题了(((
试试看 双亲ClassLoader
问题描述
简明版: 在onEnable方法中调用该JvmPlugin类的ClassLoader的
getResourceAsStream("net/mamoe/mirai/console/command/SimpleCommand.class")
方法返回为null(但是loadClass是能够返回正确的Class的)我的动机: 我在试图整合spring和mirai以简化mirai的开发。spring在初始化容器的时候会从ClassLoader中读取Component的父类字节码,我的Component继承了mirai-console的SimpleCommand类,我设置spring容器的ClassLoader为我的JvmPlugin类的ClassLoader,根据IDEA的debugger显示也就是JvmPluginClassLoaderN类。spring调用了该类的
getResourceAsStream("net/mamoe/mirai/console/command/SimpleCommand.class")
方法获取到了null导致容器初始化失败。复现
logger会输出null
mirai-core 版本
2.14.0
bot-protocol
ANDROID_PHONE
其他组件版本
Running MiraiConsole v2.14.0, built on 2023-02-06 14:25:21. Frontend Terminal: version 2.14.0, provided by Mamoe Technologies
Permission Service: Built In Permission Service
Plugins: Hammer Spring Test v0.1.0
系统日志
No response
网络日志
No response
补充信息
使用语言为Kotlin,版本为1.8.0 在mcl环境下测试了以后和上文结果相同。 如果在这个ClassLoader中获取不到mirai的库class是设计的话,想要请问有没有什么方法来获取到这个class资源?我目前的临时解决方法就是直接用mcl的libs文件夹中的jar包来构建URLClassLoader,但这样做似乎不是很安全的样子(