Eclipse RCP App:如何提示用户设置工作区

时间:2017-02-13 23:42:11

标签: osgi eclipse-rcp workspace

我希望我的RCP应用始终提示用户输入工作区位置。我可以使用-data中的eclipse.ini arg或osgi.instance.area.default中的configuration/config.ini属性指定默认位置。但我不希望用户必须了解和编辑这些文件中的任何一个以更改工作区位置。

设置首选项Prompt for workspace on startup无效。我在干净的工作区中启动应用程序,没有设置-data arg或osgi.instance.area.default属性,并在当前目录中创建一个workspace文件夹,并且不提示选择位置。

我为我的应用程序使用了IDEApplication类的副本。我看到第188行是start()之后运行的第一行之一,平台位置已经设​​置,这样就无法显示对话框。我甚至不知道为什么在尝试启动UI之前已经设置了它,并且设置首选项没有任何效果。 (我在configuration/.settings/org.eclipse.ui.ide.prefs中验证了SHOW_WORKSPACE_SELECTION_DIALOG=true)。

我尝试通过添加

来重新设置位置
instanceLoc = instanceLoc.createLocation(instanceLoc, null, false);

checkInstanceLocation()的开头。这样就可以启用工作区选择器对话框,但以这种方式设置位置不会影响应用程序在启动时实际使用的实例区域。

我认为我的应用中的某些earlyStartup代码可能会干扰,因为我读到如果您过早访问首选项,则可能会阻止工作区选择器打开。所以我评论了我所拥有的几个earlyStartup声明,但仍然无法显示工作区选择器对话框。

1 个答案:

答案 0 :(得分:0)

问题是,作为我的OSGI服务的依赖项加载的某些类正在访问类ResourcesPlugin,这会导致立即设置工作空间位置。由于这是在启动工作区选择器对话框之前发生的,因此使用的位置是指定的-data arg的值,否则为$(pwd)/workspace

我尝试通过调整服务插件的启动级别来解决问题。启动级别为7或更高时,工作区选择器对话框不再被抢占。但是,该服务无法正常工作。在多次尝试使用自定义启动级别使服务正常工作失败后,我放弃了这种方法并重新编写了代码,因此在应用程序启动过程中稍后会引用ResourcesPlugin。具体来说,我将其移至我的自定义postWindowOpen实施的WorkbenchWindowAdvisor方法。