捆绑罐:为他们创建捆绑?
我是OSGi的新手,并且正在使用Equinox。 我已经做了几次搜索,并且无法找到答案。 OSGI的讨论 - 处理捆绑所需的第三方JAR有所帮助,但没有完全回答我的问题。
我已经获得了一个jar文件rabbitmq-client.jar
,该文件已经打包为一个OSGi包(Bundle-Name和其他MANIFEST.MF中的这些属性),我想将其作为一个包进行安装。 该jar从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
。
rabbitmq-client.jar
的软件包已经包含在Equinox全局类路径中, rabbitmq-client.jar
将从那里自动获取它们。 rabbitmq-client.jar
。 我读过一个通常不使用OSGi容器中的全局类路径。 我不清楚全局类路径中的项是否在构建单独的束类路径时可用。 但是,我注意到rabbitmq-client.jar
也导入了其他包,例如javax.net
,我猜想它来自全局类路径。 还是有一些其他的捆绑出口呢?
感谢您的帮助!
解决方案(2)是正确的方法。 (1)和(3)不起作用,因为如你已经理解的那样,在OSGi中不存在全局类路径。
每个软件包导入所需的所有软件包,并且这些软件包必须由另一个软件包导出。 这是一个例外,它是java.*
命名空间下的所有类...即不需要导入java.lang
和java.util
等
像javax.net
这样的包来自JRE,但它们仍然不在“全局类路径”上。 有一个叫做System Bundle的特殊bundle,它代表OSGi中的OSGi框架本身。 该bundle会导出一堆来自JRE的软件包,如javax.net
, javax.swing
, org.w3c.dom
等。
我还想补充一下Neil曾经说过,对于常见的捆绑软件,比如commons-io,通常不需要选项(2),因为其他人已经完成了它。 有一个包含许多转换包的SpringSource存储库。 对于commons-io,你可以做得更好,因为maven central的'官方'jar版本1.4已经是一个捆绑包了。
链接地址: http://www.djcxy.com/p/74717.html