Eclipse OSGI配置:相对路径和/或@ config.dir类似的替换?

时间:2011-02-09 17:06:54

标签: eclipse configuration osgi eclipse-rcp equinox

在我的RCP应用程序中,我想将一个属性(osgi.java.profile)指向一个文件,并希望使用相对于我的安装和配置目录的路径。

是否有关于config.ini支持哪种变量的确定规范?


似乎支持@ config.dir,内置中有引用,并且它总是作为典型示例提到(例如this SO answer) 但是,看看像Eclipse帮助/ Runtime Options这样的文档,它提到了一些像@ user.home这样的“符号位置”;但是这似乎相当有限,并且不包括@ config.dir。

甚至还挖掘了org.eclipse.osgi个来源,并且没有找到对此的引用(我确实找到了@Manager.dir& co的LocationManager及其硬编码变量替换)。 我能以某种方式参考任意系统属性吗?

这个@config.dir是一个特例,只能由P2处理吗? 更新:这似乎是这样的..查看Eclipse SDK,关于..配置对话框显示@ config.dir未解析,可能是字面上由Equinox实现..

感谢任何提示。

5 个答案:

答案 0 :(得分:3)

我迟到了,但希望这将有助于其他人。

从Eclipse 3。8 / 4.2(2012年6月)开始,您可以将Java属性和环境变量替换为config.ini文件(Eclipse Bug 241192)。 Equinox启动程序不支持eclipse.ini启动程序文件中的替换。语法使用美元符号($ VARIABLE $)来表示变量替换:

osgi.configuration.area=$APPDATA$/MyCompany/MyProgram/configuration
osgi.user.area=$APPDATA$/MyCompany/MyProgram/user
osgi.instance.area=$APPDATA$/MyCompany/MyProgram/instance

我想你可以为你的目的使用这样的东西:

osgi.java.profile=$osgi.install.area$/path/to/profile.txt

答案 1 :(得分:1)

来自org.eclipse.core.runtime.adaptor.LocationManager,这里有特殊的令牌:

    // Data mode constants for user, configuration and data locations.                                                                                          
    private static final String NONE = "@none"; //$NON-NLS-1$                                                                                                   
    private static final String NO_DEFAULT = "@noDefault"; //$NON-NLS-1$                                                                                        
    private static final String USER_HOME = "@user.home"; //$NON-NLS-1$                                                                                         
    private static final String USER_DIR = "@user.dir"; //$NON-NLS-1$                                                                                           

答案 2 :(得分:1)

为什么不使用两个系统属性变量?

一个名为-Dmy.relativepath=filename,由您的eclipse安装文件夹(工作区或任何地方)的相对路径代码处理,另一个名为-Dmy.path=absolutepath

系统属性传递给jvm,如果你想在其值中使用变量,你需要在本机启动器(如eclipse.exe)中使用一些技巧(在运行时转换变量)。

答案 3 :(得分:1)

了解如何在org.eclipse.osgi.framework.internal.core.Framework中解析osgi.java.profile:

// check for the java profile property for a url
String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE);
if (propJavaProfile != null)
    try {
        // we assume a URL
        url = new URL(propJavaProfile);
    } catch (MalformedURLException e1) {
        // try using a relative path in the system bundle
        url = findInSystemBundle(propJavaProfile);
    }

这意味着osgi.java.profile必须指向完全限定的URL,或者指向系统包(org.eclipse.osgi)中的相对路径。如果不修补Eclipse,这就无法使用安装目录相对路径。

答案 4 :(得分:1)

您可以使用平台网址(Platform URI scheme)来实现此目的,即

osgi.java.profile = platform:/config/java_profile.txt
config.ini中的

将指向当前配置目录中的文件java_profile.txt

您也可以在config.ini中使用现有的系统属性:

osgi.java.profile = ${osgi.configuration.area}/java_profile.txt