【问题标题】:Using Openjfx 11 classes in an OSGi application在 OSGi 应用程序中使用 Openjfx 11 类
【发布时间】:2019-03-19 23:38:47
【问题描述】:


有谁知道是否有办法在 Eclipse 工作区中使用 JavaFX 模块?我有一个 OSGi-maven 多模块应用程序。

到目前为止,我已经尝试了几件事。

  1. 下载 JavaFX SDK 并将 jars 添加到 eclipse 中作为用户定义的库。
  2. 捆绑 JavaFX jar 并在此之后将它们用作常规 OSGi 捆绑包(作为依赖项添加,之后在目标平台中添加)。

这两件事都有效。但是,在第一种情况下,每个开发人员都必须手动将这些 jar 作为库添加到类路径中。其次,对于每个平台,我们必须为每个模块提供不同的捆绑包。

如果我不做这些事情,我就会编译错误,无法找到 JavaFX 类(如预期的那样)。

有没有第三种方法可以做到这一点?通过使用一些 OSGi 功能或类似的东西? 我还没有找到在 MANIFEST.MF 中添加模块的任何方法。这甚至可能吗?

我在 OSGi 框架启动器中添加了 JavaFX 模块作为 VM 参数,一切正常。但是我必须做之前提到的其中一件事情,这样我就不会出现编译错误。 虚拟机参数:--module-path /path/to/javafx/sdk/11/lib --add-modules javafx.controls,javafx.graphics,javafx.base

【问题讨论】:

    标签: maven osgi eclipse-rcp openjfx javafx-11


    【解决方案1】:

    我尝试将使用 JRE 8 的 E4/OSGI/GEF/JavaFx 项目转换为 JRE 11 和 OpenJFX 11,并找到了这样做的方法。

    就我而言,我使用 SWT 和 javafx.embed.swt.FxCanvas。在 modulepath 中包含用户定义的 JavaFX 库不起作用,在编译时生成 class not found 错误;但包括类路径中的库有效。

    我也无法使用--module-path 参数运行应用程序;它给了NoClassDefFoundError org.eclipse.swt.widgets.Canvas 例外

    我的解决方案使用 E(fx)clipse,这也可能是您的第三个选项。在类路径中包含 javafx 库并在项目配置中包含 org.eclipse.fx.osgi 后,我使用以下 VM 参数使用 E(fx)clipse 加载 JavaFX 类。

    -Dosgi.framework.extensions=org.eclipse.fx.osgi -Defxclipse.java-modules.dir=[openjfx-lib-directory]

    您还可以添加-Defxclipse.osgi.hook.debug=true" 以在加载类时查看来自 E(fx)clipse 的调试消息。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 2011-06-23
      • 2020-07-15
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      相关资源
      最近更新 更多