- 在 solo 的
solo\src\main\webapp\plugins
目录下应该是存放插件的地方,这里有三个文件夹(git clone 时就有的),里面的插件似乎都不完整,每次启动 solo 都会因为找不到插件对应的 classes 目录而报错。虽然不影响 solo 的启动,但是看到这一连串的报错总是觉得不完美。 - solo 前台的模板如果想自己开发,扩展应该也提供相关的文档说明供用户使用,或者有详细文档我没找到,如有知情者请告之。谢谢。
solo 的插件开发,模板开发哪里有文档说明?(顺便修复 JDK11 以上插件加载会报错的问题)
相关帖子
-
yanxingangsun • • 1作者
没错就是这里说的这个问题,JDK11 以上插件加载会报错。看了 github 上处理问题的对话,最后要求降版本到 java1.8 来解决,但是原因可能没有找到,这样会影响整个项目的升级。
这个问题的原因隐藏得较深,问题不是出在 solo 上,而是出在 latke-core 的 org.b3log.latke.plugin.PluginManager 的代码上,问题代码如下:final URLClassLoader classLoader = new URLClassLoader(new URL[]{ defaultClassesFileDirURL, classesFileDirURL}, PluginManager.class.getClassLoader());
首先
defaultClassesFileDirURL
这个变量一般情况下值为null
,在defaultClassesFileDirURL==null
的情况下,new URLClassLoader(new URL[]{ defaultClassesFileDirURL, classesFileDirURL}, PluginManager.class.getClassLoader());
- 在 java1.8 版本情况下运行不会抛出异常;
- 在 java11 以后版本情况下运行会抛出异常;
在抛出异常后插件加载失败。
把上面代码改成如下形式,问题即可解决:
URLClassLoader classLoader=null; if(defaultClassesFileDirURL==null){ classLoader = new URLClassLoader(new URL[]{ classesFileDirURL}, PluginManager.class.getClassLoader()); } else{ classLoader = new URLClassLoader(new URL[]{ defaultClassesFileDirURL, classesFileDirURL}, PluginManager.class.getClassLoader()); }
这个老大难问题解决了,项目版本可以顺利升级了,希望站长能多给些奖励哈。 今天有点晚了,明天我去 github 上提个 PR 吧,早点关闭掉。
1 回复3 操作yanxingangsun 在 2019-06-28 00:09:37 更新了该回帖yanxingangsun 在 2019-06-28 00:08:25 更新了该回帖yanxingangsun 在 2019-06-28 00:06:42 更新了该回帖 - 其他回帖
- 查看全部回帖
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于