1

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

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

目前我的客户工作得很好,但 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,它不支持类型安全的服务检索。

4

1 回答 1

5

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

例如,如果 RCP 需要 1.5 版本的包,而 JBoss 需要 1.3.6,则 import version="[1.3.6,2)"。

语义版本控制白皮书 (pdf)解释了为什么这种导入方式是安全且明智的。

于 2012-04-29T21:33:42.537 回答