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

标签 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 参数(我在 Eclipse Luna 下运行我的项目,使用 this plugin):
-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 吗?任何人都可以帮助我吗?这是正确的方法吗?

最佳答案

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

关于eclipse - OSGi Felix 应用程序中未解析的 JavaFX 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28738369/

相关文章:

java - 获取具有某些条件的 tableView 项目的特定行(JavaFX)

JavaFX ListView 被 TextArea 使用 GridPane 覆盖

button - javafx 多个按钮到同一个处理程序

eclipse - 如何在Eclipse中默认设置 "delete project contents on disk"选项?

android - 如何在eclipse中调试子项目中的Intent

eclipse - Maven构建失败。从命令行成功

java - Maven:如何使用包含外部库的可运行 jar(uber jar)

java - 配置构建路径有效,但在 pom 中添加相同的依赖项不起作用

java - Android 应用程序出现 'DB2SimpleDataSource Class not found' 错误

在 Maven 中使用 Spark 时出现 java.lang.NoClassDefFoundError