【发布时间】:2017-03-16 04:23:55
【问题描述】:
我正在尝试运行我的 Maven OSGi JavaFx 项目,但我不断收到以下错误:
org.osgi.framework.BundleException: Unable to resolve launcher [4](R 4.0): missing requirement [launcher [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javafx.application) Unresolved requirements: [[launcher [4](R 4.0)] osgi.wiring.package; (osgi.wiring.package=javafx.application)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
at impl.App.loadBundles(App.java:84)
at impl.App.initialize(App.java:60)
at impl.App.main(App.java:26)
mvn clean package 完美运行,我生成了我的项目 jars。
一些阅读让我this StackOverflow answer:
JavaFX 应用程序依赖于来自 JavaFX API 的包,例如 javafx.application 和其他几个。
在 Java 8 中,javafx.* 包由基本 JRE 提供。然而,OSGi 不会自动从 JRE 导出每个包,因为所有 JRE 都有一堆非标准包(例如 com.sun.* 等),普通应用程序代码不应访问这些包。因此,OSGi 仅提供由相关 JCP 规范为您正在使用的 Java 版本定义的包。例如 javax.swing、org.w3c.dom 等包。
由于 JavaFX 不是标准,因此没有针对 JavaFX 的 JCP 规范,并且 OSGi 不导出 javafx.* 包。但是,您可以通过在启动 OSGi 时设置以下配置属性来配置 OSGi 为您执行此操作:
org.osgi.framework.system.packages.extra=javafx.application,...
我该如何实施上述建议,或者我可以做些什么来解决这个问题?
【问题讨论】: