gpt4 book ai didi

osgi - 在 OSGi 包中使用 JavaFX 2.2

转载 作者:行者123 更新时间:2023-12-04 09:15:43 27 4
gpt4 key购买 nike

如何在 OSGi 包中使用 JavaFX 2.2?我使用的是 Apache Felix,所以它不是 eclispe 项目。它必须在安装了 Java7 的 Mac OSX 上运行(Java6 很酷但不是必需的)。

我已经阅读了一些关于重新打包 jfx 库但用于 eclispe 插件项目的内容。

只是在 bundle Manifest 中导入 javafx 包创建了一个缺失的需求 osgi.wiring.package 异常。

最佳答案

可能为您提供帮助有点晚了,但我想记录一种在 OSGi 环境中启用 JavaFX 的简单方法,以防万一像我这样的人仍然无法做到这一点......

问题是,您需要允许 JavaFX 加载和使用它想要的任何类(JavaFX 使用 JRE 的内部结构,这使得它很难捆绑),所以您真正想要的是让它访问 OSGi提升类路径...

我不是专家,但在这篇博客中,来自 SpringSource 的 Costin Leau 以 3 种不同的方式解释了如何做到这一点(对于任何假设完全访问系统类加载器的 jar,而不仅仅是 JavaFX):

http://blog.springsource.org/2009/01/19/exposing-the-boot-classpath-in-osgi/

我选择使用选项 A,这基本上意味着在 OSGi 容器的配置文件中设置 OSGi 指定的属性(并非特定于任何实现!):

org.osgi.framework.system.packages.extra=javafx.application;version=0.0.0 ...



您可以在我创建的这个 Gist 中看到该属性的全部值(value):

https://gist.github.com/renatoathaydes/5021107

我基本上用 JavaFX 2.2 jar 可以导出的所有包来设置它(我通过简单地将 JavaFX jar 放入我的 Apache Karaf 的部署文件夹中发现了这一点,它会自动将它打包成一个包,然后查看生成的 list )...顺便说一句,我尝试使用由 Karaf 生成的包(它使用 pax-wrap 来完成)但是由于 JavaFX 尝试加载您的类(不可见)的方式,这将不起作用在尝试的 JavaFX 包中,更不用说 JavaFX 尝试访问的所有 JRE 包)。

我怀疑并不是我添加的所有包实际上都是必需的,但为了安全起见,我将它们全部保留为由 Karaf 的包装器生成的,并且在工作时,除非有充分的理由,否则我不会更改它。

现在,只要 JRE lib 文件夹中存在 jfxrt.jar,我的任何包都可以使用 JavaFX。

关于osgi - 在 OSGi 包中使用 JavaFX 2.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com