solo 的插件开发,模板开发哪里有文档说明?(顺便修复 JDK11 以上插件加载会报错的问题)

本贴最后更新于 2141 天前,其中的信息可能已经沧海桑田
  • 在 solo 的 solo\src\main\webapp\plugins 目录下应该是存放插件的地方,这里有三个文件夹(git clone 时就有的),里面的插件似乎都不完整,每次启动 solo 都会因为找不到插件对应的 classes 目录而报错。虽然不影响 solo 的启动,但是看到这一连串的报错总是觉得不完美。
  • solo 前台的模板如果想自己开发,扩展应该也提供相关的文档说明供用户使用,或者有详细文档我没找到,如有知情者请告之。谢谢。
1 操作
yanxingangsun 在 2019-06-28 08:08:38 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
    • 目前已知 JDK11 以上插件加载会报错,如果有空可帮忙排查
    • 皮肤开发请看 README 中提到的文档
    1 回复
  • yanxingangsun
    作者

    我切换成 JDK8 的平台重新编译执行还是会报错:(下面是我加的打印)

    pluginDirPaths: [/plugins/kanbanniang/, /plugins/list/, /plugins/symphony-interest/] [ERROR]-[2019-06-27 09:38:33]-[org.b3log.latke.plugin.PluginManager:180]: defaultClassesFileDirURL : /plugins/kanbanniang/classes 目录不存在,插件加载失败! [ERROR]-[2019-06-27 09:38:33]-[org.b3log.latke.plugin.PluginManager:180]: defaultClassesFileDirURL : /plugins/list/classes 目录不存在,插件加载失败! [ERROR]-[2019-06-27 09:38:33]-[org.b3log.latke.plugin.PluginManager:180]: defaultClassesFileDirURL : /plugins/symphony-interest/classes 目录不存在,插件加载失败!

    看了一下,这个问题涉及到 latke 的 latke-core 模块,在 latke-core 模块的 org.b3log.latke.plugin.PluginManager 代码中会查找/plugins 目录下的插件对应的 classes 目录:"/plugins/" + plugin + "/classes",如果没有找到这个目录就会抛出异常。跟 JDK 版本没有关系。下面是 solo 的 plugins 目录下的文件结构,你看看跟我的一样吗?(而且都没有 classes 目录)
    tree.zip

    solo\src\main\java\org\b3log\solo\plugin 目录下也没有那三个插件对应的 java 源码文件。

    D:\solo\src\main\java\org\b3log\solo\plugin>tree /f 卷 工作 的文件夹 PATH 列表 卷序列号为 0006-4F18 D:. │ package-info.java │ └─list ListHandler.java
    3 操作
    yanxingangsun 在 2019-06-27 10:07:13 更新了该回帖
    yanxingangsun 在 2019-06-27 10:06:36 更新了该回帖
    yanxingangsun 在 2019-06-27 10:03:20 更新了该回帖
  • yanxingangsun
    作者

    回贴有字数限制到 4096,建议扩大一些,很多打印信息贴上来就超了。可以扩到 40960 好些。

    1 操作
    yanxingangsun 在 2019-06-28 00:18:30 更新了该回帖
  • Solo 里面插件的目录结构没有问题,这里是之前其他人反馈的信息,麻烦对比参考一下是否是同一个问题。

    PS 发帖最长字符数是 102400,回帖是 4096。回帖限制设定得比较短是因为大部分场景下已经够用,日志帖关键部分就行,如果需要帖完整的话可以打包上传。

  • 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 更新了该回帖
  • Latke 项目上我已经开了个 issue 了,请帮忙 PR 修复,谢谢!

请输入回帖内容 ...

推荐标签 标签

  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 708 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 1 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    368 引用 • 1846 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25392 引用 • 104959 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    174 引用 • 3852 回帖 • 1 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 93 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 3 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 85 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 92 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 181 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 638 关注
  • 自由行
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 2 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 1 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 291 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 5 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 3 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 161 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖 • 1 关注