坦率地说:除了在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生命周期复杂化,我讨厌它...