为什么即使解决了所有依赖关系,OSGi Bundle也不会启动?

时间:2015-08-20 07:04:21

标签: java osgi cq5 osgi-bundle

1)问题1:
我已经遇到过这种情况很多次,找到将它们转换为OSGi格式的传递依赖,并在OSGi容器中部署它们已经很痛苦了。

但有时甚至在完成上述操作后,捆绑包无法启动为什么?

我仔细检查了导入,所有人都满意,没有红色标记,但是捆绑拒绝“激活”,它总是显示“已安装”。 为什么会这样?

2)问题2
另一个问题我面临的是 NoClassDefError在运行时发生,即使Bundle中存在该类并且该包是活动的。

这方面的一个例子是org.apache.xmlbeans.XmlObject NoClassDefError

如果它丢失了,那么它应该在“red”中显示为缺少依赖项,但是它显示所有依赖项已解析且bundle是Active? 我也提取了包的内容以确定它是否真的存在,并发现它存在然后为什么会出现这些奇怪的错误?

注意:我的工作环境是Adobe CQ5。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:3)

  1. 只需从shell手动启动捆绑(我希望CQ有一个shell)。它应该显示一个可以帮助你的例外。
  2. 如果bundle访问类但没有为包定义Import-Package语句,则可能发生NoClassDefFound。如果该类甚至位于同一个包中,则NoClassDefFound意味着该包不使用标准类加载器。因此,捆绑包可能没有为OSGi做好充分准备。 您应该在创建捆绑包的社区中将此类错误报告为问题。

答案 1 :(得分:2)

捆绑包无法启动的一个可能原因是它们的激活器会抛出异常。这些应该在日志中可见,如果没有,我会在捆绑激活器中设置一个断点,看看发生了什么。

相关问题