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

时间:2018-10-15 14:01:37

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


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

到目前为止,我已经尝试了一些方法。

  1. 要下载JavaFX SDK并在eclipse中将jar添加为用户定义的库。
  2. 要捆绑JavaFX jar并将其作为常规OSGi捆绑包使用(在依赖关系中以及之后在目标平台中添加)。

这两种方法都能起作用。但是,在第一种情况下,每个开发人员都必须手动将这些jar作为库添加到类路径中。在第二个平台中,每个模块都必须有不同的捆绑软件。

如果我都不做这些事情,那么我将遇到编译错误,即找不到JavaFX类(按预期)。

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

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

1 个答案:

答案 0 :(得分:0)

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

就我而言,我使用SWT和javafx.embed.swt.FxCanvas。在模块路径中包括用户定义的JavaFX库不起作用,从而在编译时生成未找到的类错误;但是将库包含在classpath中是可行的。

我也无法使用--module-path参数运行该应用程序;它为NoClassDefFoundError

赋予了org.eclipse.swt.widgets.Canvas例外

我的解决方案使用E(fx)剪辑,这也可能是您的第三个选择。在将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的调试消息。