Osgi Eclipse RCP应用程序:如何提示用户设置工作区

Osgi Eclipse RCP应用程序:如何提示用户设置工作区,osgi,eclipse-rcp,workspace,Osgi,Eclipse Rcp,Workspace,我希望我的RCP应用程序始终提示用户输入工作区位置。我可以使用eclipse.ini中的-data参数或configuration/config.ini中的osgi.instance.area.default属性指定默认位置。但是我不希望用户必须知道并编辑这些文件来更改工作区位置 设置首选项启动时提示工作区无效。我在一个干净的工作区中启动应用程序,没有-dataarg或osgi.instance.area.default属性集,它会在当前目录中创建一个工作区文件夹,并且不会提示选择位置 我将ID

我希望我的
RCP
应用程序始终提示用户输入工作区位置。我可以使用
eclipse.ini
中的
-data
参数或
configuration/config.ini
中的
osgi.instance.area.default
属性指定默认位置。但是我不希望用户必须知道并编辑这些文件来更改工作区位置

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

我将
IDEApplication
类的副本用于我的应用程序。我看到,在第188行(在
start()
之后运行的第一行之一)中,平台位置已经设置好,这阻止了对话框的显示。我不知道为什么在尝试启动UI之前就已经设置好了,而设置首选项没有任何效果。(我在
configuration/.settings/org.eclipse.ui.ide.prefs
中验证了
SHOW\u WORKSPACE\u SELECTION\u DIALOG=true

我尝试通过添加

instanceLoc = instanceLoc.createLocation(instanceLoc, null, false);
的开头,检查InstanceLocation()
。这将启用“工作区选择器”对话框,但以这种方式设置位置对应用程序启动时实际用于其实例区域的内容没有影响


我想我的应用程序中可能有一些
earlyStartup
代码可能会产生干扰,因为我读到,如果你过早访问首选项,你可以阻止工作区选择器打开。因此,我注释掉了我拥有的少数
earlyStartup
声明,但仍然无法显示“工作区选择器”对话框。

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


我试图通过调整服务插件的启动级别来解决这个问题。如果开始级别为7或更高,“工作区选择器”对话框不再被抢占。但是,当时的服务没有正常工作。在多次尝试使用自定义启动级别使服务正常工作失败后,我放弃了这种方法,重新编写了代码,以便在应用程序启动过程的稍后阶段引用
ResourcesPlugin
。具体地说,我将它移动到了我的自定义
WorkbenchWindowVisor
实现的
postWindowOpen
方法。

它可能正在拾取一个保存的位置。初始位置是在
org.eclipse.osgi.internal.location.EquinoxLocations
buildLocation
方法中设置的,因此请尝试跟踪它。问题是我提供的osgi服务正在访问ResourcesPlugin。当我删除提供服务的捆绑包插件的延迟激活策略时,工作区选择器将加载。但是现在我的服务没有被注入(我使用声明性服务来提供和使用它)。我尝试了一个更高的服务包启动级别,但没有帮助。如何延迟服务的启动,或者在不延迟激活其捆绑包的情况下使服务可用?NM。似乎我没有尝试一个足够高的起点。默认值是4,我尝试了5。它适用于7或更高版本。我想我应该用10?有没有办法精确地确定我需要使用什么?