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

标签 maven osgi eclipse-rcp openjfx javafx-11


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

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

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

这两种方法都有效。但是,在第一种情况下,每个开发人员都必须手动将这些 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

最佳答案

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

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

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

提供了 NoClassDefFoundError 异常

我的解决方案使用 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 的调试消息。

关于maven - 在 OSGi 应用程序中使用 Openjfx 11 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52818494/

相关文章:

java - 是否有任何 Java 编译器利用 OSGi 环境而不是使用类路径?

java - 从 rcp 插件创建 exe 时检测到循环依赖关系

java - 扩展树节点

spring - Maven:trustAnchors 参数必须非空且为 'parent.relativePath' @ InvalidAlgorithmParameterException @ Non-resolvable Parent POM

java - Maven `help:effective-pom` 只为单个项目生成,而不是所有项目

osgi - 在 Adob​​e CQ5 中设置属性

java - Swing App 与 Spring DM 启动问题

java - 文件和资源包 ://URLs

java - 如何在 IntelliJ IDEA 中禁用 pom.xml 验证

java - Eclipse 在重命名时复制包及其资源