我是OSGi的新手,我正在使用Equinox.我做了几次搜索,却找不到答案.OSGI的讨论- 处理捆绑所需的第三方JAR有所帮助,但并未完全回答我的问题.
我已经获得了一个jar文件,rabbitmq-client.jar它已经打包为OSGi包(在其MANIFEST.MF中包含Bundle-Name和其他此类属性),我想将其作为包安装.这个jar导入包org.apache.commons.io和org.apache.commons.io.input来自commons-io-1.2.jar.RabbitMQ客户端2.7.1发行版也包括commons-cli-1.1.jar,所以我认为它也是必需的.
我检查了这些公共罐子的清单,发现它们似乎没有打包成捆.也就是说,它们的清单没有标准的捆绑属性.
我的具体问题是:如果我rabbitmq-client.jar作为一个bundle 安装,那么从commons jar导入需要访问它的软件包的正确方法是什么?我可以想到的只有三种选择,没有重建rabbitmq-client.jar.
rabbitmq-client.jar从那里自动获取它们.rabbitmq-client.jar将从那里开始.我已经读过,通常不会在OSGi容器中使用全局类路径.在构建单个bundle类路径时,我不清楚全局类路径中的项是否可用.但是,我注意到rabbitmq-client.jar还会导入其他包,例如javax.net我认为来自全局类路径的包.或者是否有其他一些出口产品?
谢谢你的帮助!
解决方案(2)是正确的方法.(1)和(3)不起作用,因为你似乎已经理解,OSGi中没有全局类路径.
每个bundle都会导入它需要的所有包,并且这些包必须由另一个包导出.有一个例外,这是在所有类java.*的命名空间......也就是说,没有必要进口java.lang,java.util等等.
诸如此类的软件包javax.net来自JRE,但它们仍未处于"全局类路径"中.有一个名为System Bundle的特殊包,它代表OSGi中的OSGi Framework本身.这束出口一堆包是来自JRE如javax.net,javax.swing,org.w3c.dom,等.
| 归档时间: |
|
| 查看次数: |
2863 次 |
| 最近记录: |