获取已安装在OSGi运行时的bundle的InputStream?

时间:2014-12-05 17:27:46

标签: java osgi apache-felix equinox

我正在尝试创建运行时安装的软件包的备份文件,以便我可以卸载它,然后可以根据需要重新安装备份。有没有人知道如何处理已安装在运行时的bundle文件的位置?我想以一种无论OSGi容器如何工作的方式(特别是我希望它在Equinox和Felix中工作)。理想情况下,这将是从Bundle对象(或从Bundle对象获取的对象的信息)获得的信息。

编辑:简而言之,我正在安装每个软件包(bundleContext.getBundles)并尝试确定软件包的文件路径。

2 个答案:

答案 0 :(得分:1)

你不能这样做。 OSGi规范没有提供任何方法来获取已安装捆绑包的输入流。这主要是因为OSGi不要求捆绑包以JAR的形式出现,也不要求它们以任何存档格式存储。例如,OSGi框架可以将包的条目存储在数据库中,然后从该数据库中查找所请求的类和资源。因此,您看到无法保证安装后JAR表单中存在捆绑包。

答案 1 :(得分:0)

使用bundle.getLocation()。它将返回捆绑软件的安装位置(如果可用)。无法保证您可以从那里加载捆绑包,但取决于您最初安装捆绑包的方式,这是有效的。