我正在尝试创建运行时安装的软件包的备份文件,以便我可以卸载它,然后可以根据需要重新安装备份。有没有人知道如何处理已安装在运行时的bundle文件的位置?我想以一种无论OSGi容器如何工作的方式(特别是我希望它在Equinox和Felix中工作)。理想情况下,这将是从Bundle
对象(或从Bundle
对象获取的对象的信息)获得的信息。
编辑:简而言之,我正在安装每个软件包(bundleContext.getBundles
)并尝试确定软件包的文件路径。
答案 0 :(得分:1)
你不能这样做。 OSGi规范没有提供任何方法来获取已安装捆绑包的输入流。这主要是因为OSGi不要求捆绑包以JAR的形式出现,也不要求它们以任何存档格式存储。例如,OSGi框架可以将包的条目存储在数据库中,然后从该数据库中查找所请求的类和资源。因此,您看到无法保证安装后JAR表单中存在捆绑包。
答案 1 :(得分:0)
使用bundle.getLocation()。它将返回捆绑软件的安装位置(如果可用)。无法保证您可以从那里加载捆绑包,但取决于您最初安装捆绑包的方式,这是有效的。