P2更新失败,使用非默认的osgi.configuration.area

时间:2013-05-14 10:55:06

标签: equinox p2

我正在尝试在共享环境中使用基于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

感谢您的帮助! 克里斯托弗

0 个答案:

没有答案