Eclipse P2 IUQuery 总是有空结果
Eclipse P2 IUQuery alway has empty result
我尝试使用 eclipse P2 来启用我的一个工具,以便在 eclipse 启动时自动更新自身。这样做时,我想使用仅适用于 ID 为 "my.feature.id" 的 "my" 功能的 UpdateOperation。每当在 eclipse 安装中发出此查询时,它的结果都是空的,因此无需更新。
那么:我如何使用 QueryUtil 权限获取仅包含我的更新功能的集合作为 UpdateOperation 的输入?
想要在 eclipse 启动时开始更新时调用以下方法:
public class P2Util {
public static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor) {
ProvisioningSession session = new ProvisioningSession(agent);
IQuery<IInstallableUnit> query = QueryUtil.createLatestQuery(QueryUtil.createIUQuery("my.feature.id"));
UpdateCheckActivator.info("Update Query Expression: " + query.getExpression());
IProfileRegistry registry= (IProfileRegistry)agent.getService(IProfileRegistry.SERVICE_NAME);
IProfile profile= registry.getProfile(IProfileRegistry.SELF);
IQueryResult<IInstallableUnit> result = profile.query(query, monitor);
Set<IInstallableUnit> unitsForUpdate = result.toUnmodifiableSet();
UpdateOperation operation = new UpdateOperation(session, unitsForUpdate);
}
}
解决方案非常简单,但起初令人困惑。试图查找具有 "my.feature.id" 的特征的查询正在查询错误的 ID。
在我的功能的 feature.xml 中它是 "my.feature.id" 但可安装单元由于不明显的原因得到后缀 "feature.group"。如果将此添加到查询中的 id,您将获得正确的结果,并且更新操作会按预期成功。
我尝试使用 eclipse P2 来启用我的一个工具,以便在 eclipse 启动时自动更新自身。这样做时,我想使用仅适用于 ID 为 "my.feature.id" 的 "my" 功能的 UpdateOperation。每当在 eclipse 安装中发出此查询时,它的结果都是空的,因此无需更新。
那么:我如何使用 QueryUtil 权限获取仅包含我的更新功能的集合作为 UpdateOperation 的输入?
想要在 eclipse 启动时开始更新时调用以下方法:
public class P2Util {
public static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor) {
ProvisioningSession session = new ProvisioningSession(agent);
IQuery<IInstallableUnit> query = QueryUtil.createLatestQuery(QueryUtil.createIUQuery("my.feature.id"));
UpdateCheckActivator.info("Update Query Expression: " + query.getExpression());
IProfileRegistry registry= (IProfileRegistry)agent.getService(IProfileRegistry.SERVICE_NAME);
IProfile profile= registry.getProfile(IProfileRegistry.SELF);
IQueryResult<IInstallableUnit> result = profile.query(query, monitor);
Set<IInstallableUnit> unitsForUpdate = result.toUnmodifiableSet();
UpdateOperation operation = new UpdateOperation(session, unitsForUpdate);
}
}
解决方案非常简单,但起初令人困惑。试图查找具有 "my.feature.id" 的特征的查询正在查询错误的 ID。
在我的功能的 feature.xml 中它是 "my.feature.id" 但可安装单元由于不明显的原因得到后缀 "feature.group"。如果将此添加到查询中的 id,您将获得正确的结果,并且更新操作会按预期成功。