1

OSGi 框架 api 中是否有一些东西封装了未安装在容器中的包?基本上,它会获取一个文件并使用 getSymbolicName()、getExportedPackages()、getBundleVersion() 等为文件系统中的包生成一个对象。

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

框架中已安装的捆绑包。

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

我需要一个,我想知道是否有一个标准的,然后再创建我自己的

4

1 回答 1

1

正如您所说,捆绑包用于安装捆绑包。它可以在 OSGi 容器内用于由容器处理的捆绑包。但是,如果您需要您提到的信息,使用一个小功能很容易获得。

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

您可以在 checkBundle() 函数中找到一个示例从第 91 行开始)

编辑

如果包来自其他地方但不是来自文件系统,则可以使用 JarInputStream。

您可以尝试将felix 清单解析器类(或 equinox 或 Knopflerfish 等效项)取出到一个独立项目中,并与社区共享它;-)。

于 2013-10-25T14:21:36.073 回答