我使用 Apache Felix Shell 为 OSGi 创建了一个命令组件。一个命令打开一个新线程,该线程启动 SWT UI。
在 BND 配置中,需要 SWT bundle 来构建和运行该组件。现在的问题是,每个开发人员都必须更改配置并为其操作系统包含 SWT bundle 。此外,对于每个操作系统,都需要其他打包的 bundle ,唯一的区别是 jar list 中的一行,需要其他 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 来完成此操作。
有什么想法吗?
最佳答案
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
关于java - OSGi/BND : Different requirements depending on OS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11344645/