【问题标题】:OSGi plugin - MANIFEST.MF being overriden changed at runtimeOSGi 插件 - MANIFEST.MF 在运行时被覆盖更改
【发布时间】:2012-10-13 18:52:17
【问题描述】:

你们知道是否有某种方法可以在加载插件时以编程方式更改 MANISFEST.MF 设置?如果我能在 Activator 启动方法上做到这一点,那对我来说是完美的。

例如:

我有一个 plugin1 依赖于它的 MANIFEST.MF 到 plugin2 (Require-Bundle: plugin2;bundle-version="1.0.0")> 想要做的改变是在之前设置重新导出这样的依赖项(可见性:=reexport) 加载插件1。

任何建议

提前致谢

拉斐尔·莫伊塔

【问题讨论】:

  • Paulius Matulionis,不确定您的意思。
  • 知道了!感谢 Paulius Matulionis,并为此向其他所有人道歉!

标签: java plugins osgi manifest.mf


【解决方案1】:

您无法更改清单。清单包含解析捆绑包所需的声明性信息,并为它提供一个对必要类型具有可见性的类加载器。您的激活器类由该类加载器加载。你怎么能期望加载类加载器的类改变类加载器可见的类的定义?

为什么不在安装包之前修改清单?

【讨论】:

  • 我们有一个为团队插件提供自定义激活器的框架。这个自定义激活器为开发人员提供了一些额外的功能,现在还在插件代码上做一些更改(注入代码)以加载它。为了让它工作,它需要重新导出一些依赖项,因为注入后它会被再次编译,我得到一个 ClassDefFoundError。由于注入的代码是遗留代码,我可以要求团队手动更改它,我正在寻找一种方法来加载/安装包。
  • 你看过weaving hooks吗?虽然您不需要实际编写代码,但您可以在运行时 add dynamic import package clauses
  • 这不是导入包的问题,​​而是类可见性的情况。这就是我想重新导出特定依赖关系的原因。
  • 好的,那么您需要使用修改后的版本更新捆绑包,并根据需要更改清单。
  • 如果可以的话,我不会在运行时寻找一种方法来做到这一点;)......但无论如何谢谢!
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 2011-03-04
  • 2021-05-02
  • 2011-04-17
  • 2011-06-15
  • 2010-12-25
  • 2021-04-11
  • 2020-04-15
相关资源
最近更新 更多