在 OSGi 应用程序中使用 Openjfx 11 类

Using Openjfx 11 classes in an OSGi application


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

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

  1. 下载 JavaFX SDK 并在 eclipse 中添加 jar 作为用户定义的库。
  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

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

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

我也无法 运行 使用 --module-path 个参数的应用程序;它为 org.eclipse.swt.widgets.Canvas

提供了 NoClassDefFoundError 例外

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

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

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