OSGi / BND:不同的要求取决于操作系统

时间:2012-07-05 12:45:42

标签: java osgi bnd

我为OSGi创建了一个命令组件并使用了Apache Felix Shell。一个命令打开一个新的线程,启动一个SWT UI。

在BND配置中,构建和运行此组件需要SWT Bundle。现在的问题是,每个开发人员都必须更改配置并为他们的操作系统包含SWT Bundle。同样对于每个操作系统,需要一个其他打包的Bundle,其中唯一的区别是jar的Manifest中的一行,其他Bundles需要启动。

BND或OSGi中是否有任何技巧,我可以根据当前运行的系统设置构建或运行依赖项?

像“org.eclipse.swt。{OS}。{WS}。{ARCH}”而不是“org.eclipse.swt.win32.win32.x86_64”? 或者至少我可以在配置中要求特定的操作系统吗?因此,如果用户使用了错误的包,它会显示一个很好的错误而不是ClassNotFound异常?

另一个问题(http://stackoverflow.com/questions/2706222/create-cross-platform-java-swt-application/5784073#5784073)中描述的解决方案不适用于我或更好我不这样做知道如何用BND / OSGi完成。

任何想法?

2 个答案:

答案 0 :(得分:1)

可以使用包含。因此,创建一个标准配置,并将其包含在特定于平台的bndrun文件中。

 bnd.bnd:
 # standard set that uses macros for the places where specials need to be insered
 -runbundles: \
        ....
        ${platformdeps}

 windows.bndrun:
 -include bnd.bnd
 platformdeps = org.eclipse.swt.win.x86.jar

无论如何,看看bndtools。 Neil Bartlett在没有PDE的情况下在bndtools中构建bndtools。所以他有适用于所有平台的bndrun文件。

还有$ {if ...}宏或$ {replace}宏。如果人们仍然支付书籍而不是下载盗版版本......在解决小问题之前,请查看http://www.aqute.biz/Bnd/Bnd

答案 1 :(得分:0)

Neil Bartlett的书“OSGi in Practice”有一个关于Fragment Bundles的部分,其中提到了与操作系统相关的配置。 (但是,由于我没有必要真正这样做,我不能说,这是否真的是你正在寻找的。)

这本书:http://njbartlett.name/osgibook.html

(这不是一个非常好的答案,但可能已经足够了。)