8

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

config.ini 中支持哪些类型的变量是否有明确的规范?


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

甚至还挖掘了org.eclipse.osgi源代码,但没有发现对此的引用(我确实找到了 LocationManager 及其对@user.dir & co 的硬编码变量替换)。我可以以某种方式在那里引用任意系统属性吗?

这个@config.dir 是一个特例,只由 P2 处理吗? 更新:这似乎是这种情况.. 看着 Eclipse SDK,关于.. 配置对话框显示 @config.dir 未解决,可能是由 Equinox 字面意思..

感谢您的任何提示。

4

5 回答 5

3

我参加聚会迟到了,但希望这对以后的其他人有所帮助。

从 Eclipse 3.8/4.2(2012 年 6 月)开始,您可以将 Java 属性和环境变量替换为您的 config.ini 文件(Eclipse 错误 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
于 2014-01-15T23:59:32.370 回答
2

您可以使用平台 URL(平台 URI 方案)来实现这一点,即

osgi.java.profile = platform:/config/java_profile.txt

in config.ini, 将指向java_profile.txt当前配置目录中的文件。

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

osgi.java.profile = ${osgi.configuration.area}/java_profile.txt
于 2012-02-15T11:13:57.293 回答
1

看看 osgi.java.profile 是如何解决的org.eclipse.osgi.framework.internal.core.Framework

// 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 的情况下无法使用安装目录的相对路径。

于 2011-06-10T12:19:02.763 回答
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$                                                                                           
于 2011-02-10T04:20:14.910 回答
1

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

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

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

于 2011-06-07T09:08:17.130 回答