坦率地说:除了在Manifest文件上设置有错误(或没有)的IStartup.earlyStartup()之外,是否有任何解释说明让Eclipse插件运行其BundleActivator.start()方法而不是Activator

我检查了四倍,我很肯定自己没有在清单中正确设置激活器,所以我发现这种行为很奇怪。

当将此插件作为我们正在开发的工具的一部分运行时,Activator确实已运行,尽管出于某些原因earlyStartup()并未运行,但是当我尝试通过Eclipse运行相同的插件时,情况恰恰相反。

根据我的理解,BundleActivator.start()总是运行,因此我发现这种行为很有趣。我非常肯定我已经正确设置了Activator,就好像我尝试键入其他东西一样,Eclipse抱怨“给定的类不在类路径上”。

任何有关此事的线索将不胜感激。

最佳答案

检查捆绑软件的状态...如果它已解决(我相信会解决),那么您就得到了答案。 OSGi仅在捆绑实际启动时才调用BundleActivator.start()方法!不幸的是,Eclipse在调用IStartup扩展之前没有启动捆绑软件。

您可以通过在MANIFEST.MF中设置Bundle-ActivationPolicy: lazy来强制OSGi启动捆绑软件。这是Eclipse和OSGi的标志,当从捆绑软件中加载第一个类时,捆绑软件将自动启动捆绑软件。加载的类可能是您的IStartup实现。

但是恕我直言Bundle-ActivationPolicy不必要地使OSGi生命周期复杂化,我讨厌它...

10-04 23:36
查看更多