OSGI Bundle的start()方法没有被调用

时间:2015-11-05 22:40:58

标签: osgi osgi-bundle

我的环境中有很少的激活器捆绑包。只是其中一个bundle start()方法没有被调用。基本上它没有被激活。这个捆绑包唯一的变化是,它正在使用" DynamicImport-Package:"。   删除此标记解决了start()未被调用的问题,但这是不可能的,因为在我的场景中,所有软件包都不是预先知道的。

有人可以帮助我,因为我很坚持这一点。 我无法弄清楚问题是什么以及它们如何相关。

2 个答案:

答案 0 :(得分:1)

他们没有关系。删除DynamicImport-Package将不会影响您的捆绑包是否启动,因此必须继续执行其他操作。你真的在任何地方调用捆绑上的Bundle.start()方法吗?

顺便说一句,使用DynamicImport-Package是个非常糟糕的主意。几乎可以肯定,有一种更好的方法可以解决您认为使用DI-P解决的任何问题。

答案 1 :(得分:1)

使用DynamicImport-Package尤其是*时,无法控制绘制包的位置。因此,如果两个捆绑包导出相同的包,那么您将遇到大问题。

例如,我遇到了pax考试的问题,该考试使用此* import作为测试包,其中包含javax.inject包的两个版本。由于他们的捆绑调用测试看到了不同版本的包,服务导入不起作用。

因此,在您的示例中,您可能有两个版本的包org.osgi.framework,其中BundleActivator接口所在的位置。 你安装org.osgi.core api包吗?如果是,则删除它。只有框架才能提供这些包。它可能会导致框架无法使用您的激活器类。