我正在尝试在共享环境中使用基于equinox的应用程序,如{Sormario#2或#3所述here。
安装是通过p2 director使用使用buckminster创建的p2站点完成的。
我希望多个用户可以使用共享安装,但有自己的配置区域,以便他们可以单独更新应用程序。我的问题是在这种情况下p2更新不再起作用:它没有找到更改的插件并返回“没有更新”,尽管这不是真的。
在我搜索答案时,我发现即使使用本地安装,只要我使用非默认配置区域(osgi.configuration.area),p2更新就会停止工作。
我认为这可能是因为配置文件上的查询存在问题。我用这段代码做了一些测试以获得root功能(我知道它是唯一一个id以“de.emsw.gosa.feature”开头的代码):
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;
}
使用标准本地安装,此代码按预期工作,并返回已安装的根功能。使用costum配置区域找不到根功能,因为
profile.query(QueryUtil.createIUQuery(id), null)
返回一个emtpy结果。
有没有人有这种情况或任何其他指针的经验?
如果感兴趣,这是配置文件(包括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
感谢您的帮助! 克里斯托弗