为了账号安全,请及时绑定邮箱和手机立即绑定

如何在模块化 java 11 应用程序中动态加载 Libreoffice jar

如何在模块化 java 11 应用程序中动态加载 Libreoffice jar

交互式爱情 2023-07-19 10:26:49
我正在尝试在运行时从模块化 java 11 应用程序加载和访问 libreoffice uno jar。为了在编译时使用 libreoffice 类并避免拆分包的问题,我们将所有 jar 合并到一个具有自动模块名称的单独的org.jabref.thirdparty.libreofficejar 中。要从 libreoffice 安装目录加载 jar(例如,C:\Program Files\LibreOffice\program\classes为了确保从程序文件而不是从我的模块路径加载 jar,我创建了一个自定义类加载器。   URL[] urls = jarUrls.toArray(new URL[3]);    Class<Bootstrap> clazz  = (Class<Bootstrap>) Class.forName("com.sun.star.comp.helper.Bootstrap", true, new ChildFirstClassLoader(urls, this.getClass().getClassLoader()));    Boostrap boot = clazz.getDeclaredConstructor().newInstance();    XComponentContext xContext = boot.bootstrap():现在这给了我以下错误: java.lang.ClassCastException: class com.sun.star.comp.helper.Bootstrap cannot be cast to class com.sun.star.comp.helper.Bootstrap (com.sun.star.comp.helper.Bootstrap is in unnamed module of loader org.jabref.logic.openoffice.ChildFirstClassLoader @13c4b54c; com.sun.star.comp.helper.Bootstrap is in module org.jabref.thirdparty.libreoffice of loader 'app')我确实理解这里的问题并阅读了很多有关此问题的内容,但找不到解决此问题的方法。关键问题是我必须使用 LO 文件夹中的 jar,否则它将找不到 libreoffice 实例。我考虑过将模块化 jar 也放入 LO 文件夹中,但不确定这是否可行。在 Java 8 下,我们使用典型的“reflection + addUrls”方法,因为所有内容都在类路径上。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

从 LibreOffice 7.0 开始,现在有一个与 Java 模块系统一起使用的组合 libreoffice.jar。



查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信