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

在同一个jar中打包多个OSGi包,osgi,osgi-bundle,Osgi,Osgi Bundle,我对OSGi平台非常陌生 如果有一个OSGi bundleB1依赖于另一个bundleB2,这很可能不是由容器提供的,我可以将这两个bundle打包在同一个jar中吗 如果是:怎么做?如果安装了jar,并且捆绑包已经安装,会发生什么情况?是的,您可以这样做。。。有点 通常OSGi包是JAR文件,因为它们需要META-INF/MANIFEST.MF。OSGi框架无法直接读取“多包”JAR 但是,在OSGi中安装bundle需要调用BundleContext.installBundle方法。该方法有

我对OSGi平台非常陌生

如果有一个OSGi bundle
B1
依赖于另一个bundle
B2
,这很可能不是由容器提供的,我可以将这两个bundle打包在同一个
jar
中吗


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

是的,您可以这样做。。。有点

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


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

尽管OSGi不直接支持同一JAR中的多个bundle,但在同一存档中有一个多个bundle的标准,这解决了您试图解决的分发问题。不幸的是,它可能会在您的场景中引入一个额外的问题,因为它是企业OSGi的一部分,而不是核心OSGi,所以它不会是赤裸裸的Equinox或Felix框架的一部分。如果您对用户使用的起始平台有更多的控制权,它可能会满足您的需要

基本思想是将所有捆绑包打包到一个带有.esa扩展名的zip中,并附带一个简单清单。然后可以分发esa文件。本教程包含更多详细信息:

只是好奇你为什么要这么做?您可以同时加载B1和B2捆绑包。@codesalsa,因为我们不能强制某人(非技术人员)下载两个文件。实际上,OSGi上有一个插件框架,安装这样一个插件最常用的方法是提供一个jar文件(它是一个包)。我看到你的网站上有一本免费的好书:“OSGi在实践中”。非常感谢你,尼尔!!!