【发布时间】:2012-06-29 09:31:56
【问题描述】:
我是 OSGi 的新手,并且正在使用 Equinox。我已经进行了几次搜索,但找不到任何答案。 OSGI - handling 3rd party JARs required by a bundle 的讨论有所帮助,但并未完全回答我的问题。
我已经获得了一个 jar 文件 rabbitmq-client.jar,它已经被打包为一个 OSGi 包(在它的 MANIFEST.MF 中带有 Bundle-Name 和其他此类属性),我想将它安装为一个包。这个 jar 从 commons-io-1.2.jar 导入包 org.apache.commons.io 和 org.apache.commons.io.input。 RabbitMQ 客户端 2.7.1 发行版还包含commons-cli-1.1.jar,所以我认为它也是必需的。
我检查了这些公共 jar 的清单,发现它们似乎没有被打包为捆绑包。也就是说,它们的清单没有任何标准的捆绑属性。
我的具体问题是:如果我将rabbitmq-client.jar 安装为一个包,那么访问需要从公共 jar 导入的包的正确方法是什么?在不重建rabbitmq-client.jar的情况下,我只能想到三个替代方案。
- commons jar 中的包已经包含在 Equinox 全局类路径中,
rabbitmq-client.jar将从那里自动获取它们。 - 我必须使用两个公共 jar 制作另一个包,导出所需的包,然后在 Equinox 中安装该包。
- 当我启动 Equinox 时,我必须将这两个公共 jar 放在全局类路径中,它们将从那里提供给
rabbitmq-client.jar。
我读到过通常不会在 OSGi 容器中使用全局类路径。我不清楚全局类路径中的项目在构建单个捆绑类路径时是否可用。但是,我注意到rabbitmq-client.jar 还导入了其他包,例如javax.net,我认为它们来自全局类路径。还是有其他一些捆绑包可以导出它们?
感谢您的帮助!
【问题讨论】: