我正在尝试在此处描述为 Szenario #2 或 #3 的共享环境中使用基于 Equinox 的应用程序。
安装是通过 p2 控制器使用 buckminster 创建的 p2 站点完成的。
我希望多个用户可以使用共享安装,但有自己的配置区域,以便他们可以单独更新应用程序。我的问题是 p2 更新在这种情况下不再起作用:它找不到更改的插件并返回“没有要更新的内容”,尽管这不是真的。
在我寻找答案的过程中,我发现 p2 更新一旦使用非默认配置区域 (osgi.configuration.area) 就会停止工作,即使是本地安装也是如此。
我认为这可能是由于对个人资料的查询存在问题。我用这段代码做了更多的测试来获得根特性(我知道它是唯一一个以“de.emsw.gosa.feature”开头的id):
private IInstallableUnit findRootFeature(IProfile profile) {
IInstallableUnit[] userVisibleRoot = profile.query(new UserVisibleRootQuery(), null).toArray(IInstallableUnit.class);
if (userVisibleRoot.length > 0) {
for (IRequirement requirement : userVisibleRoot[0].getRequirements()) {
IMatchExpression<IInstallableUnit> matchExpression = requirement.getMatches();
String id = matchExpression.getParameters()[0].toString();
if (id.startsWith("de.emsw.gosa.feature")) { //$NON-NLS-1$
IInstallableUnit[] queryResult = profile.query(QueryUtil.createIUQuery(id), null).toArray(IInstallableUnit.class);
return getLatestVersion(queryResult);
}
}
}
return null;
}
private IInstallableUnit getLatestVersion(IInstallableUnit[] queryResult) {
if (queryResult.length == 0)
return null;
IInstallableUnit latest = queryResult[0];
if (queryResult.length > 1) {
for (int i = 1; i < queryResult.length; i++) {
if (queryResult[i].getVersion().compareTo(latest.getVersion()) > 0) {
latest = queryResult[i];
}
}
}
return latest;
}
使用标准的本地安装,此代码按预期工作并返回已安装的根功能。对于服装配置区域,找不到根特征,因为
profile.query(QueryUtil.createIUQuery(id), null)
返回一个空结果。
有没有人对这种情况或任何其他指针有任何经验?
如果感兴趣,这是配置文件(包括 osgi.configuration.area):
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Tue May 14 11:09:34 CEST 2013
eclipse.p2.profile=gosa
osgi.instance.area.default=@user.home/Anwendungsdaten/gosa/client/data
osgi.configuration.area=@user.home/Anwendungsdaten/gosa/client/configuration
osgi.nl=de_DE
osgi.framework=file\:plugins/org.eclipse.osgi_3.8.0.v20120529-1548.jar
equinox.use.ds=true
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.300.v20110815-1744.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.product=de.emsw.gosa.product.client.product
osgi.splashPath=platform\:/base/plugins/de.emsw.gosa.images
osgi.framework.extensions=
osgi.bundles.defaultStartLevel=4
eclipse.application=de.emsw.gosa.product.client.ClientApplication
eclipse.p2.data.area=@config.dir/../p2
谢谢你的帮助!克里斯托夫