我是OSGi平台的新手。
有一个OSGi包B1
与另一个包B2
有依赖关系,这很可能不是由容器提供的,我可以将这两个包打包在同一个jar
吗? / p>
如果是:怎么做?如果安装了jar
并且已经安装了捆绑包,会发生什么?
答案 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