在我的RCP应用程序中,我想将一个属性(osgi.java.profile
)指向一个文件,并希望使用相对于我的安装和配置目录的路径。
是否有关于config.ini支持哪种变量的确定规范?
甚至还挖掘了org.eclipse.osgi
个来源,并且没有找到对此的引用(我确实找到了@Manager.dir& co的LocationManager及其硬编码变量替换)。
我能以某种方式参考任意系统属性吗?
这个@config.dir是一个特例,只能由P2处理吗? 更新:这似乎是这样的..查看Eclipse SDK,关于..配置对话框显示@ config.dir未解析,可能是字面上由Equinox实现..
感谢任何提示。
答案 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