【问题标题】:org.osgi.framework.BundleException: Unable to resolve missing requirement osgi.wiring.package; (osgi.wiring.package=javafx.application) [duplicate]org.osgi.framework.BundleException:无法解决缺少的需求 osgi.wiring.package; (osgi.wiring.package=javafx.application)[重复]
【发布时间】: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,...

我该如何实施上述建议,或者我可以做些什么来解决这个问题?

【问题讨论】:

    标签: java maven javafx osgi


    【解决方案1】:

    在您构建框架对象的应用程序中,您传入一个配置参数映射。您可以使用所需的 javafx 包在映射中设置 org.osgi.framework.system.packages.extra 属性。

    【讨论】:

    • 感谢您的回复。你能说明一下@BJ Hargrave 吗?
    • @Program-Me-Rev BJ 给出的答案以及我在对您所链接的问题的回答中缺少什么?我已将您的问题标记为重复。
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 2017-03-23
    • 2016-09-01
    • 2015-08-09
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多