【问题标题】:How to run some code as soon as Eclipse has started?如何在 Eclipse 启动后立即运行一些代码?
【发布时间】:2015-03-07 19:42:11
【问题描述】:

我正在开发一个 Eclipse 插件,它需要计算 Eclipse 启动所需的时间。

我可以通过使用org.eclipse.ui.startup扩展点在我的插件中获取自JVM启动以来的时间量,并使用ManagementFactory.getRuntimeMXBean().getUptime()eclipse.startTime系统属性记录时间。

但是,在启动期间,Eclipse 可能会询问用户工作空间位置,这将计入 JVM 启动时间。由于我的插件试图测量非用户交互时间,这使得上述方法相当无用(除非用户选择了默认工作区位置,但不能保证是这种情况)。

理想情况下,我想知道用户关闭“选择工作区”对话框的时间(或者,如果用户使用默认工作区,那么等效时间)。或者其他尽可能接近的时刻。

我做了一些研究,似乎没有任何官方的扩展点。

我有一种感觉,在足够早的启动级别 (2) 上运行自定义 OSGi 捆绑包可能会发生类似的事情。但是,我不确定它是否真的有效:

  • 也许工作区选择对话框是从某个 Eclipse 核心插件中显示的,像其他插件一样从启动级别 4 开始?
  • 即使我设法编写了这样一个包,我是否需要修改 Eclipse config.ini 以在其中列出它?或者我如何保证它将在某个启动级别启动(如果它不是一个真正的 Eclipse 插件,而是一个自定义包)? This article 提到了p2.inf,但我的实验还没有成功。

由于我在 OSGi 和 Eclipse 插件开发方面没有太多经验,也许我错过了一些相当明显的东西,并且解决方案比我想象的要简单得多?


更新 经过一番研究,我发现了一个早期的扩展点:StartupMonitor 服务(通常用于自定义启动屏幕或提供其他类型的启动进度监视器,请参阅here 了解更多详细信息)。这可能是我需要的候选者,现在我只需要弄清楚如何让 Eclipse 意识到它(我怀疑我需要将它添加到 config.ini)。

我正在考虑的另一个选择是实现一个 JVM 代理和工具 Eclipse IDEApplication 类,添加一些我需要的代码 sn-ps。然后在eclipse.ini 的JVM 参数中添加该JVM 代理。实际上可能是最简单的。

【问题讨论】:

    标签: java eclipse-plugin osgi equinox osgi-bundle


    【解决方案1】:

    我采用了 JVM 代理方法。幸运的是,P2 能够通过touchpoints 执行一些额外的操作——我可以使用它在插件安装时自动添加 JVM 代理选项,并在插件卸载时将其删除。

    示例p2.inf 文件(进入META-INF):

    instructions.install = \
      addJvmArg(jvmArg:-javaagent:${artifact.location}/agent/my-agent.jar);
    instructions.install.import = \
      org.eclipse.equinox.p2.touchpoint.eclipse.addJvmArg, \
      org.eclipse.equinox.p2.touchpoint.eclipse.removeJvmArg
    instructions.uninstall = \
      removeJvmArg(jvmArg:-javaagent:${artifact.location}/agent/my-agent.jar);
    instructions.uninstall.import = \
      org.eclipse.equinox.p2.touchpoint.eclipse.addJvmArg, \
      org.eclipse.equinox.p2.touchpoint.eclipse.removeJvmArg
    

    (以上示例假定您已将 JVM 代理捆绑在插件中,位于 agent 子目录中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多