【问题标题】:Listener to be notified just after the Eclipse WORKSPACE gets created?在创建 Eclipse WORKSPACE 后立即通知侦听器?
【发布时间】:2014-07-11 20:15:42
【问题描述】:

我可以注册一个侦听器以在 Eclipse 工作区完全创建(.metadata 完成)后立即收到通知吗?

两种情况: 1.如果工作空间存在,通知监听器位置 2.如果工作空间是新的(要求选择工作空间位置的对话框,在这种情况下,只需选择一个新位置)。我想在完全创建工作区时收到通知(例如,.metadata 已完全创建)。

是否可以编写一个插件来处理这样的事件?

谢谢。

【问题讨论】:

  • 在 .metadata 目录中创建数据涉及许多插件,并且可能要等到 UI 显示后一段时间才能完成(例如,初始化 Java 索引可能需要一些时间)。没有什么可以知道这一切何时结束。

标签: eclipse osgi workspace workbench


【解决方案1】:

工作区是在 org.eclipse.core.resources 启动期间创建的。如果您的产品配置正确并且您的代码依赖于资源插件,那么您应该没有问题 - 工作区应该在那里。

如果您依赖于其他一些初始化,例如提到的 Java 东西 greg-449,那么可能在 JDT 中寻找通知挂钩是可行的方法。或者收听 OSGi 事件并查看正在启动的捆绑包。

Eclipse 使用大量延迟加载,因此您可能永远无法达到所有插件都被初始化的地步。

你能删除一些关于用例的细节吗?这可能会有所帮助。

【讨论】:

  • 我的用例是这样的:
  • 我的用例是这样的:当用户创建新工作区或选择旧工作区时,我编写了一个插件来初始化 slf4j/logback(而 OSGi 会发挥它的魔力,直到 osgi.instance.area指向选择的工作空间位置,请注意:在选择对话框之前,osgi.intance.area系统属性不可用),我将动态创建文件{osgi.instance.area}/configuration/logback.xml并动态设置logback。 configurationFile 到该位置并重新加载 logback。在 logback.xml 中,日志将输出到 {osg.instance.area}/logs/something.log.
  • 这样,logback 配置和日志只绑定到特定的工作空间。
  • 看看 ResourcesPlugin.start(BundleContext)。可以看到 IWorkspace 在初始化后在 OSGi 中注册为服务。因此,只需等待服务(ServiceTracker 或声明式服务)可能是一种解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2017-04-27
  • 2013-03-07
  • 2021-12-31
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多