我是OSGi的新手,并且正在使用Equinox。我已经做了几次搜索,并且无法找到答案。在OSGI - handling 3rd party JARs required by a bundle的讨论有所帮助,但并没有完全回答我的问题。OSGi bundle从非捆绑包jar包导入包:为它们创建捆绑包?
我已经获得了一个jar文件rabbitmq-client.jar
,它已经打包为一个OSGi包(Bundle-Name和其他MANIFEST.MF中的这些属性),我希望将它作为一个包进行安装。该罐从commons-io-1.2.jar
进口包装org.apache.commons.io
和org.apache.commons.io.input
。 RabbitMQ客户端2.7.1发行版也包含commons-cli-1.1.jar
,所以我认为它也是必需的。
我检查了这些常见罐子的清单,发现它们看起来并没有打包成捆。也就是说,他们的清单没有任何标准的捆绑特性。
我的具体问题是:如果我将rabbitmq-client.jar
作为捆绑安装,访问需要从commons jar中导入的包的正确方法是什么?我能想到的只有三种选择,无需重建rabbitmq-client.jar
。
- 来自commons jars的软件包已包含在Equinox全局类路径中,并且
rabbitmq-client.jar
将从那里自动获取它们。 - 我必须用两个commons jar创建另一个bundle,导出所需的软件包,并在Equinox中安装该软件包。
- 当我启动Equinox时,必须将这两个commons jar放在全局类路径中,并且从那里可以使用
rabbitmq-client.jar
。
我读过一个通常不使用OSGi容器中的全局类路径。我不清楚全局类路径中的项是否在构建单独的束类路径时可用。但是,我注意到rabbitmq-client.jar
也导入了其他包,例如javax.net
,我认为它来自全局类路径。还是有一些其他的捆绑出口呢?
感谢您的帮助!
谢谢,@neil,这有帮助。我已经阅读了一些OSGi教程,但没有完全回答这些问题。我想我会在OSGi新手上徘徊一段时间,直到我弄明白为止。 –