在运行时修改Bundle Manifest

时间:2011-09-11 17:04:25

标签: java runtime osgi bundles

是否可以(如果是这样,安全)在其生命周期的任何时间修改捆绑的MANIFEST(即大概只在安装和解决之间)。

我想另一种问这个问题的方法是,

在安装之后,但是在解决之前,MANIFEST是否已经完全评估(即进一步的更改将被忽略),因此更改太晚了?

如果上述所有内容看起来都很荒谬..那么我的下一个问题是,是否有人认为可以(没有令人讨厌的框架黑客)来包装MANIFEST解析(即类加载器步骤以获取META-INF / MANIFEST。来自捆绑的MF)与自定义impl。

背景:考虑现有的模块化框架,而不是基于OSGi,我希望通过提供部署现有“插件”基调的能力来简化向OSGi迁移的过程。没有修改,并且在运行时,执行分析(“插件”已明确定义,因此映射不应该很难),它将它们转换为真正的OSGi包,使用BND运行时操作生成MANIFEST,用于代替可能不存在或非osgi-bundle MANIFEST。

希望这有意义(@njbartlett!)

2 个答案:

答案 0 :(得分:4)

为什么不定义一个在安装/更新过程中改变清单的URL方案?当框架通过URLConnection访问bundle时,您可以返回带有mutated manifest的mutated bundle。这基本上是Web捆绑支持的功能,它也适用于您。

答案 1 :(得分:1)

不,你不能这样做。在安装操作期间读取整个JAR文件(以及MANIFEST.MF)。为了更改该JAR中的任何内容,您必须更新捆绑包或卸载并重新安装。

关于您真正想做的事情,为什么不能在将JAR作为捆绑包安装之前通过bnd 执行分析和转换?