在同一个jar中包装多个OSGi包

时间:2013-11-22 15:23:12

标签: osgi osgi-bundle

我是OSGi平台的新手。

有一个OSGi包B1与另一个包B2有依赖关系,这很可能不是由容器提供的,我可以将这两个包打包在同一个jar吗? / p>

如果是:怎么做?如果安装了jar并且已经安装了捆绑包,会发生什么?

2 个答案:

答案 0 :(得分:3)

是的,你可以这样做......有点。

通常,OSGi包是JAR文件,因为它们需要有META-INF / MANIFEST.MF。 OSGi框架无法直接读取您的“多包”JAR。

但是,在OSGi中安装bundle涉及调用BundleContext.installBundle方法。此方法有两种风格,其中一种采用InputStream作为参数;此InputStream应提供OSGi包的内容。因此,您可以使用大型JAR并使用JarInputStream读取它,并将各个条目传递给installBundle方法。

答案 1 :(得分:0)

虽然OSGi不直接支持同一个jar中的多个bundle,但是在同一个 archive 中有多个bundle的标准,它解决了你试图解决的分发问题。不幸的是,它可能会在您的场景中引入一个额外的问题,因为它是企业OSGi的一部分,而不是核心OSGi,因此它不会成为Equinox或Felix框架的一部分。如果您可以更好地控制用户使用的起始平台,那么它可以满足您的需求。

基本思想是将所有捆绑包打包成带有.esa扩展名的zip,以及一个简单的清单。然后,您可以分发esa文件。本教程包含更多详细信息: http://coderthoughts.blogspot.co.uk/2013/04/osgi-subsystems.html?m=1