0

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

我检查了四次,我很肯定我没有在清单中错误地设置激活器,所以我发现这种行为相当奇怪。

当将此插件作为我们正在开发的工具的一部分运行时,Activator虽然由于某种原因没有运行,但确实运行了earlyStartup(),但是当我尝试通过 Eclipse 运行相同的插件时,情况正好相反。

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

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

4

1 回答 1

2

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

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

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

于 2013-07-03T19:41:24.473 回答