BlessAzek
本帖最后由 BlessAzek 于 2022-2-20 15:11 编辑

libs 这个文件夹中存放了所有需要加载的库
目前仅我实现了从网上下载所有需要的库(这个其实挺简单的

插件启动时会从 libs 中加载所有的 jar
网上也找遍了教程

尝试使用过 classloader 但效果甚微....


求问大佬们有方法吗


QingyuOvO
授人以鱼不如授人以渔


第一步:打开浏览器
第二步:在地址栏输入www.baidu.com

第三步:在百度的搜索框中输入文本“动态加载jar包”,不会打字的话复制粘贴也可以

第四步:点击第一个搜索结果
第五步:复盘并记录整个过程,形成笔记加强记忆,争取下次问出更有水平的问题。


BlessAzek
QingyuOvO 发表于 2022-2-20 16:20
授人以鱼不如授人以渔

我承认我是一个初学者,
但你也不用给出这样的回答,
不用这样阴阳怪气的哈,
不想回答就直接忽略不就好了😓
我需要的是一个有用的回答,而不是你这篇废话
我不会自己网上找?

我说过了我尝试过了网上的方法
收效甚微后我才来的mcbbs发帖。

其次,我尝试过使用 ClassLoader

BlessAzek
QingyuOvO 发表于 2022-2-20 16:20
授人以鱼不如授人以渔

我问的是方法,亦可理解成思路,我不是直接求的代码

Hueihuea

为什么classloader不能很好的工作?
你能描述更多吗
你要用什么类库 做什么事情
我觉得一个自定义URIClassloader足够完成你的需求

Hueihuea
BlessAzek 发表于 2022-2-20 17:08
我承认我是一个初学者,
但你也不用给出这样的回答,
不用这样阴阳怪气的哈,

你问问题,你最好做好被阴阳怪气的准备。
圈子氛围就这样,你改变不了只能接受。

BlessAzek
Hueihuea 发表于 2022-2-20 17:53
为什么classloader不能很好的工作?
你能描述更多吗
你要用什么类库 做什么事情

抱歉了代码改动太大了我已经找不回之前的代码了目前的报错是这个



好像是类型转换的问题?我不知道怎么去解决(

这是所有用到的jar包:(并不是我这个插件所需要到的,大部分都是 mirai 所需的



还有你可能问我为什么不直接用 shadowJar 打包到 jar 里呢(
因为这样打包起来包太大了我看着不习惯(

目前的代码:



Hueihuea
BlessAzek 发表于 2022-2-20 18:27
抱歉了代码改动太大了我已经找不回之前的代码了目前的报错是这个

是自定义ClassLoader
也就是你自己的 另外你也不应该直接使用系统的(你直接使用系统的 但系统的ClassLoader 不是URLClassLoader的子类 所以不能强制类型转换)
最起码你应该用Bukkit的

为什么不把这些前置直接放plugins
不能运行吗?
是存在版本冲突吗?

BlessAzek
Hueihuea 发表于 2022-2-20 18:34
是自定义ClassLoader
也就是你自己的 另外你也不应该直接使用系统的(你直接使用系统的 但系统的Cl ...

原来是这样吗
我再试试... 我第一次做这种的,

emm 这些不是前置的插件,而是。。emm
就类似于  java ... -classPath "" ...
"classPath" 中的内容

Hueihuea
BlessAzek 发表于 2022-2-20 18:58
原来是这样吗
我再试试... 我第一次做这种的,

直接丢plugin 一样可以用
你如果是mod服 你直接丢mods都能用

BlessAzek
Hueihuea 发表于 2022-2-20 19:00
直接丢plugin 一样可以用
你如果是mod服 你直接丢mods都能用

???这样也行。。。。但是那样太丑了啦(

Hueihuea
而且你是想直接在服务端jvm上跑一个mirai机器人程序吗
其实我更推荐你单独跑一个mirai程序,然后用其他方式通信,比如http
而不是直接塞进spigot里
因为这确实可能导致问题,
比如你要导入的netty
mc的lib里有这个类 你强行导入可能导致版本冲突
虽然自定义的classloader+字节码技术能版本隔离来解决这个问题
但我还是不推荐你这么做

BlessAzek
BlessAzek 发表于 2022-2-20 19:07
???这样也行。。。。但是那样太丑了啦(

可是 plugins 文件夹不是只能存放插件吗。。。
放入其它不是插件的东西会报 Could not load xxxx in folder 'plugins'

Hueihuea
BlessAzek 发表于 2022-2-20 19:07
???这样也行。。。。但是那样太丑了啦(

我刚刚给你发了条回复
但是不知道为毛要审核。
我觉得你直接通过ClassLoader载入也是不行的

因为我刚刚发现你的类库里有netty(别的也可能冲突)
minecraft已经有这个类库了
可能会有版本冲突
虽然你可以用classloader+字节码黑魔法来解决这个问题
但这对你来说可能太难了

我觉得最好的解决办法是你单独跑一个mirai程序
然后用http通信

Hueihuea
BlessAzek 发表于 2022-2-20 19:09
可是 plugins 文件夹不是只能存放插件吗。。。
放入其它不是插件的东西会报 Could not load xxxx in fold ...

你放mods也报错
他会告诉你这不是一个mod 但我们(forge)仍然会把他当作类库载入
插件我记得也可以的

BlessAzek
Hueihuea 发表于 2022-2-20 19:10
我刚刚给你发了条回复
但是不知道为毛要审核。
我觉得你直接通过ClassLoader载入也是不行的

那就删掉,有了的就不弄了(
能减一点是一点

Hueihuea
BlessAzek 发表于 2022-2-20 19:13
那就删掉,有了的就不弄了(
能减一点是一点

你有没有考虑过一个问题
他用的netty新版本 有的方法旧版本没有

当然也可能没有这种问题 如果这样子的话你当然可以试试

QingyuOvO
本帖最后由 QingyuOvO 于 2022-2-20 23:44 编辑
BlessAzek 发表于 2022-2-20 17:08
我承认我是一个初学者,
但你也不用给出这样的回答,
不用这样阴阳怪气的哈,

唉,算了,想了想,还是应该对新手宽容一点。毕竟不是所有人都有闲工夫静下心来研究的。
我2016年前后尝试开发过一款群组服转发器(类似于BC),其中就是用了打包在jar中的类库和需要加载的插件。我可以非常负责的告诉你,我提到的那篇帖子绝对能解决你的问题,如果你认为不能解决,我建议你重复阅读,直到你认为能够解决为止。


第一页 上一页 下一页 最后一页