Java Eclipse插件包卡在启动状态

Java Eclipse插件包卡在启动状态,java,eclipse-plugin,osgi,Java,Eclipse Plugin,Osgi,我使用Eclipse创建了一个新的插件项目,它为我创建了一个默认的Activator。调试(作为Eclipse应用程序运行)时,我注意到没有调用此激活器的start()和stop()方法 接下来,我偶然发现了以下结果 使用ss命令,我可以看到列出的捆绑包 我的捆绑包的状态为“” 捆绑正在启动过程中。捆绑包在启动中 当其start方法处于活动状态时的状态。捆绑包必须处于此状态 调用捆绑包的BundleActivator.start(BundleContext)时。如果 BundleActiva

我使用Eclipse创建了一个新的插件项目,它为我创建了一个默认的
Activator
。调试(作为Eclipse应用程序运行)时,我注意到没有调用此激活器的
start()
stop()
方法

接下来,我偶然发现了以下结果

  • 使用
    ss
    命令,我可以看到列出的捆绑包
  • 我的捆绑包的状态为“”
捆绑正在启动过程中。捆绑包在
启动中
当其
start
方法处于活动状态时的状态。捆绑包必须处于此状态 调用捆绑包的
BundleActivator.start(BundleContext)
时。如果
BundleActivator.start
方法毫无例外地完成,然后 捆绑包已成功启动,必须移动到
活动状态


放置在
start
方法第一行的断点不会被命中。控制台中也不会显示
System.out.println
。什么会导致
start
方法没有被调用,从而导致状态陷入
start
状态?

下面的内容并没有说明OSGi控制台报告插件正在
start
,但这是一种在Eclipse启动后立即启动插件的方法

如前所述,启动代码仅在您尝试使用其中一个插件扩展时运行

使用扩展,您可以注册一个插件,希望在启动时激活。可以使用清单编辑器进行设置

  • org.eclipse.ui
    添加为“依赖项”选项卡中的依赖项
  • 在“扩展”选项卡中添加启动扩展(
    org.eclipse.ui.Startup
  • 在“extensionelementdetails”下面提供了一个实现
    org.eclipse.ui.IStartup
    的类
  • TaskManager.java

    public class TaskManager implements IStartup
    {
        @Override
        public void earlyStartup()
        {
            // This will get called when Eclipse is started,
            // after the GUI has been initialized.
        }
    }
    

    您的插件中有什么东西在测试中实际使用过吗?您是否正在尝试打开您的透视图、编辑器等?只有当您尝试使用某个插件扩展时,启动代码才会运行。@ChrisGerken这是一条有趣的评论,可能会成为答案。我打算做一个插件,它总是在启动时运行,一个“服务”。我怎么能强迫它启动呢?另外,为什么状态
    正在启动
    而没有
    解决
    呢?这个想法是为了最小化Eclipse启动时间。除了在插件提供的透视图中出现外,我不知道如何强制插件启动。我知道您可以将插件作为无头应用程序启动(就像在已部署的Eclipse应用程序中一样)。也许您可以在这里使用这些命令行参数的变体。除此之外,应该很容易看出您的问题是否是延迟初始化。如果您删除它,它将像一个普通的OSGi捆绑包一样运行,然后就开始了。@FrankLee起初我以为它没有改变任何东西,但事实上,现在它的状态设置为
    RESOLVED
    ,而不是
    STARTING
    。很有趣,但这对我没什么帮助。