用于在文件系统中封装OSGi包的类/接口

时间:2013-10-25 14:11:04

标签: java osgi

OSGi框架api中是否有封装未安装在容器中的bundle?基本上,这会带来一个文件,并为文件系统中的bundle生成一个带有getSymbolicName(),getExportedPackages(),getBundleVersion()等的对象。

我看到Bundle,但文档在第一句中说:

  

框架中已安装的捆绑包。

所以这个接口的方法对于没有安装的bundle没有意义,只是坐在文件系统中,这就是我需要的。例如,它有start()方法,在容器外没有意义。与getBundleId()

相同

我需要一个,我想在创建自己的

之前知道是否有标准的

1 个答案:

答案 0 :(得分:1)

正如你所说,

Bundle是一个INSTALLED包。它可以在OSGi容器内用于由容器处理的bundle。但是,如果您需要提到的信息,那么使用小功能很容易。

  • 创建一个新的JarFile(fileName)
  • 阅读清单
  • 读取Manifest中的值,并使用org.osgi.framework.Constants接口作为manifest.getMainAttributes()。get(key)函数的参数。

你可以在checkBundle()函数中找到一个例子here(来自第91行)

修改

如果捆绑包来自其他一些但不是来自文件系统,则可以使用JarInputStream。

您可以尝试将felix manifest parser class(或equinox或Knopflerfish等效项)取出到独立项目中并与社区分享; - )。