gpt4 book ai didi

java - 尽管正确设置了 Activator,但在不调用 BundleActivator.start() 的情况下运行 IStartup.earlyStartup() 。为什么?

转载 作者:行者123 更新时间:2023-12-02 06:55:17 24 4
gpt4 key购买 nike

坦率地说:除了有一个 Eclipse 插件运行其 IStartup.earlyStartup() 方法而不运行 BundleActivator.start() 之外,还有什么解释吗? list 文件上设置的 Activator 错误(或没有)?

我四次检查,我确信我没有在 list 中错误地设置激活器,所以我发现这种行为相当奇怪。

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

根据我的理解 BundleActivator.start() 总是运行,所以我发现这种行为相当有趣。我非常肯定我已经正确设置了 Activator,就好像我尝试输入 Eclipse 提示的其他内容“给定的类不在类路径上”一样。

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

最佳答案

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

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

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

关于java - 尽管正确设置了 Activator,但在不调用 BundleActivator.start() 的情况下运行 IStartup.earlyStartup() 。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com