我希望我的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
声明,但仍然无法显示工作区选择器对话框。
答案 0 :(得分:0)
问题是,作为我的OSGI服务的依赖项加载的某些类正在访问类ResourcesPlugin
,这会导致立即设置工作空间位置。由于这是在启动工作区选择器对话框之前发生的,因此使用的位置是指定的-data arg的值,否则为$(pwd)/workspace
。
我尝试通过调整服务插件的启动级别来解决问题。启动级别为7或更高时,工作区选择器对话框不再被抢占。但是,该服务无法正常工作。在多次尝试使用自定义启动级别使服务正常工作失败后,我放弃了这种方法并重新编写了代码,因此在应用程序启动过程中稍后会引用ResourcesPlugin
。具体来说,我将其移至我的自定义postWindowOpen
实施的WorkbenchWindowAdvisor
方法。