osgi.baseConfiguration.area无法使用相对路径解析

时间:2014-01-15 18:23:28

标签: java eclipse-rcp equinox

我公司生产一小套Eclipse RCP应用程序,这些应用程序安装在Windows上的同一共享位置(C:\ Program Files(x86)\ MyCompany)。它们共享一个插件目录,但具有单独的配置区域。

osgi.configuration.area,osgi.user.area和osgi.instance.area的所需位置位于用户的漫游应用程序数据区(Windows XP / 7上为%APPDATA%)。由于本地化要求和操作系统之间路径位置的差异,从@ user.home开始在PRODUCT.ini启动器文件中构建路径是不够的。 Bug 241192添加了在config.ini文件中指定环境变量的功能,但未在PRODUCT.ini文件中指定。

这是安装目录结构:

C:/Program Files (x86)/MyCompany
  configurationProgram1/config.ini
  configurationProgram2/config.ini
  configurationProgram3/config.ini
  jre/
  plugins/*.jar
  Program1.exe
  Program1.ini
  Program2.exe
  Program2.ini
  Program3.exe
  Program3.ini

这是一个示例PRODUCT.ini文件:

--launcher.defaultAction
openFile
-clean
-vmargs
-Xmx768m
-Dosgi.locking=none
-Dosgi.requiredJavaVersion=1.7
-Dvisualvm.display.name=Program1
-Dosgi.baseConfiguration.area=file:configurationProgram1
-Dosgi.sharedConfiguration.area=file:configurationProgram1

这是一个示例config.ini文件:

#Product Runtime Configuration File
eclipse.application=com.mycompany.app.program1.application
osgi.bundles.defaultStartLevel=4
eclipse.product=com.mycompany.app.program1.product
osgi.splashPath=platform:/base/plugins/com.mycompany.app.program1
osgi.bundles= ...
  org.eclipse.equinox.common@2:start,\
  ...
  org.eclipse.equinox.launcher.win32.win32.x86,\
  org.eclipse.swt.win32.win32.x86
osgi.configuration.area=$APPDATA$/MyCompany/Program1/configuration
osgi.user.area=$APPDATA$/MyCompany/Program1/user
osgi.instance.area=$APPDATA$/MyCompany/Program1/instance

如果启动应用程序时工作目录位于安装目录中(例如,在Windows资源管理器中双击exe,请使用带有“Start in”变量定义为安装目录的快捷方式),即osgi的相对路径。 baseConfiguration.area被解析为正确的绝对路径,osgi.configuration.area被设置为APPDATA中的正确位置。如果工作目录不是安装目录(例如,通过双击与程序关联的资源管理器中的文件打开应用程序,从任何非安装目录从命令行启动),程序将启动,但osgi.baseConfiguration.area是仍然列为相对路径,osgi.configuration.area恢复到其后备位置(对于管理员:C:/ Program Files(x86)/ MyCompany / configuration,对于用户:%USERPROFILE%/。eclipse / configuration)。 osgi.user.area和osgi.instance.area在两个实例中都已正确设置。

清楚地找到我的自定义本地配置(configurationProgram1 / config.ini),否则应用程序根本无法启动。但是在问题情况下,Equinox启动程序要么忽略我的osgi.configuration.area声明,要么重置它。我不知道如何通过Equinox启动器启动类(org.eclipse.equinox.launcher.Main)来进一步诊断问题。如果将osgi.baseConfiguration.area定义为绝对路径而不是相对路径,则会观察到正确的行为。

RCP应用程序基于Eclipse Platform 3.8.1。我确认问题仍然存在于版本3.8.2中,即3.x分支的最后一个版本。升级到e4平台目前不是一个可行的选择,但我很想知道e4中是否修复了这个问题。

我意识到我的多个应用程序的共享安装是一个独特的案例,因为共享安装的假设似乎是一个具有多个本地配置的单个应用程序和一个共享配置。我仍然怀疑这是一个Equinox bug;但是,我想询问社区我是否错误配置了我的安装,或者在这样做之前误解了有关这些osgi属性的文档。

1 个答案:

答案 0 :(得分:0)

@SheldonWarkentin在another question中报告说,LocationManager(file in 3.9 branch)要求插件/和配置/目录位于同一目录中并且完全命名,以便使用相对路径,该路径必须是由-startup和--launcher.library定义来定义plugins /目录。他的建议解决了我当前的担忧。

我正在使用此答案来提高Eclipse Bug 426189的可见性(“osgi.baseConfiguration.area和-configuration无法使用相对路径解析”),我提交了这个解决方案来解决此问题。当Equinox团队解决这个问题时,我会关闭这个问题。

更新:修复了Eclipse错误

Bug 426189已修复,将成为Eclipse 4.4(Luna)版本的一部分。