OSGi Felix应用程序中未解析的JavaFX包

时间:2015-02-26 09:14:26

标签: eclipse maven javafx osgi apache-felix

我开发了一个基于JavaFX和OSGi Felix容器的丰富应用程序。当我的JavaFX启动时,抛出 org.osgi.framework.BundleException ,表明框架无法连接我的JavaFX包:

ERROR: Bundle app-impl-bundle [3] Error starting eclipse-project:T:\workspace\fast-osgi\app-impl-bundle\ (org.osgi.framework.BundleException: Unresolved constraint in bundle app-impl-bundle [3]: Unable to resolve 3.0: missing requirement [3.0] osgi.wiring.package; (&(osgi.wiring.package=javafx.stage)(version>=2.2.0)))

这是我的MANIFEST.MF文件:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: app-impl-bundle
Bundle-SymbolicName: app-impl-bundle
Bundle-Version: 1.0.0.qualifier
Require-Bundle: app-bundle;bundle-version="0.0.1"
Bundle-Activator: com.mycompany.app.impl.Activator
Import-Package: javafx.stage;version="2.2.0",
 javax.xml.parsers,
 org.osgi.framework;version="1.8.0",
 org.w3c.dom,
 org.xml.sax
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .,
 target/lib/log4j-1.2.17.jar

这里用于启动OSGi框架的VM Arguments(我使用this plugin在Eclipse Luna下运行我的项目):

-Dosgi.requiredJavaVersion=1.8 -Dorg.osgi.framework.bundle.parent=ext

最后一个参数无效。尽管如此this article告诉它可以在Equinox上运行......

我找到了一个将此选项添加到VM参数的解决方案:

-Dorg.osgi.framework.system.packages.extra=javafx.stage

但这不是很灵活。


您认为Felix OSGi实施是否存在问题?它应该只与Equinox一起使用吗?有人可以帮帮我吗?这是正确的方法吗?

3 个答案:

答案 0 :(得分:6)

OSGi规范要求捆绑包必须导入所有不以" java。"开头的包。因此,您需要导入以" javax开头的软件包。"。所以现在你需要一个导出器和包的源。 -Dorg.osgi.framework.bundle.parent=ext为您提供了包的源代码,因为ext classloader loader包含在bundle parent中。但是框架解析器仍然需要让包的导出器知道捆绑包的导入是否已正确解析。这就是您需要-Dorg.osgi.framework.system.packages.extra=javafx.stage

的原因

答案 1 :(得分:0)

我发布了一些早期版本的Drombler FX,这是一个基于OSGi(Apache Felix)和Maven的新的JavaFX富客户端平台。

作为一个应用程序框架,它确保JavaFX和OSGi能够正常启动并提供主窗口。

您可以在此处详细了解Drombler FX:http://puces-blog.blogspot.ch/search/label/Drombler

这是一个Getting Started页面,通过几个简单的步骤解释了如何创建,构建和运行Drombler FX示例应用程序。

请注意,由于a critical bugDocking Framework目前有a bug in JavaFX。该错误应该在Java SE / JavaFX 8u40版本中修复(expected release date:2015年3月)。

答案 2 :(得分:0)

添加这两个VM参数对我来说已经解决了

-Dorg.osgi.framework.bundle.parent=ext  
-Dorg.osgi.framework.system.packages.extra=javafx.*