如何在JBoss和Eclipse RCP之间共享OSGi包?

时间:2012-04-29 17:23:42

标签: eclipse jboss eclipse-plugin osgi jboss7.x

我目前正在开发一个应用程序,它具有基于JBoss 7.1上的JavaEE 6.0的服务器部分和基于Eclipse RCP 3.7的客户端。

对于共享API的简单OSGi包,由于版本和depdencenies的一些差异,我已经遇到了麻烦。 API要求捆绑激活器使用“org.osgi.framework。”,slf4j日志API需要“org.slf4j。”。

目前我的客户端工作得很好,但是JBoss告诉我OSGi导入的预期版本以及slf4j的导入都不合适......

我有最佳实践在Eclipse和JBoss之间共享OSGi包吗?我是否需要回到简单的导入和导出声明,或者我能以某种方式使用Require-Bundle吗?我是否需要为JBoss创建一些兼容包以使其运行?在这里进行的最佳方式是什么?

更新 我通过使用Import-Package专门解决了这个问题。对于像org.osgi.framework这样的依赖是使用version =“0.0”来解释它并不重要。 :-(这不是很安全,但目前我没有看到另一种选择。有更好的方法吗?

更新2 还需要注意实现OSGi框架的正确版本。 JBoss 7.1.x仅实现了OSGi 4.2,它不支持类型安全服务检索。

1 个答案:

答案 0 :(得分:5)

最佳做法是使用导入包语句,其范围从您使用的最小版本到下一个主要增量。

例如,如果RCP期望包的版本1.5而JBoss期望1.3.6,则导入版本=“[1.3.6,2)”。

The Semantic Versioning whitepaper (pdf)解释了为什么这种导入方式是安全和明智的。