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

问题描述 投票:4回答:3

我开发了一个基于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一起使用吗?有人可以帮帮我吗?这是正确的方法吗?

eclipse maven javafx osgi apache-felix
3个回答
6
投票

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


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月)。


0
投票

添加这两个VM参数为我修复了它:

-Dorg.osgi.framework.bundle.parent=ext  
-Dorg.osgi.framework.system.packages.extra=javafx.* 
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.