0

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

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

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 完成。

任何的想法?

4

2 回答 2

1

bnd 可以使用包含。因此,创建一个标准配置并将其包含在特定于平台的 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

于 2012-12-14T16:38:21.660 回答
0

Neil Bartlett 的“OSGi in Practice”一书中有一个关于 Fragment Bundles 的部分,其中提到了依赖于操作系统的配置。(但是,由于我实际上不需要这样做,所以我不能说这是否真的是您正在寻找的。)

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

(这不是一个很好的答案,但也许足以开始了。)

于 2012-07-05T14:54:25.840 回答