在 OSGi 应用程序中使用 Openjfx 11 类
Using Openjfx 11 classes in an OSGi application
有谁知道是否有办法在 Eclipse 工作区中使用 JavaFX 模块?我有一个 OSGi-maven 多模块应用程序。
到目前为止,我已经尝试了几件事。
- 下载 JavaFX SDK 并在 eclipse 中添加 jar 作为用户定义的库。
- 捆绑 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 的调试消息。
有谁知道是否有办法在 Eclipse 工作区中使用 JavaFX 模块?我有一个 OSGi-maven 多模块应用程序。
到目前为止,我已经尝试了几件事。
- 下载 JavaFX SDK 并在 eclipse 中添加 jar 作为用户定义的库。
- 捆绑 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 的调试消息。