以编程方式配置p2更新存储库

Eclipse wiki中有一篇文章如何通过向产品中添加静态conf文件来配置用户的p2默认存储库:

Equinox / p2 /将自更新添加到RCP应用程序 – 配置用户的默认存储库

当用户更改某些配置详细信息时,我希望在Java类中以编程方式执行相同操作。 我找不到合适的p2 API文档。

我找到了解决方案。 这很容易 – 遗憾的是没有文件……

// from bundle org.eclipse.equinox.p2.console import org.eclipse.equinox.internal.p2.console.ProvisioningHelper; URI repoUri = new URI(UPDATE_SITE_URL); try { ProvisioningHelper.addMetadataRepository(repoUri); } catch( Exception e ) { LOG.warn("Can not add update repository: " + repoUri); } try { ProvisioningHelper.addArtifactRepository(repoUri); } catch( Exception e ) { LOG.warn("Can not add update repository: " + repoUri); } 

将此解决方案用于基于Eclipse 3.7的应用程序:

 final ProvisioningUI ui = ProvUIActivator.getDefault().getProvisioningUI(); IArtifactRepositoryManager artifactManager = ProvUI.getArtifactRepositoryManager(ui.getSession()); artifactManager.addRepository(new URI(UPDATE_SITE_URL); IMetadataRepositoryManager metadataManager = ProvUI.getMetadataRepositoryManager(ui.getSession()); metadataManager.addRepository(new URI(UPDATE_SITE_URL); 

对于ProvUIProvisioningUI,您必须导入包org.eclipse.equinox.p2.uiorg.eclipse.equinox.p2.operations (以及其他)。

此外,您可以使用ElementUtils添加多个存储库,也可以对它们进行排序。

 MetadataRepositoryElement[] element = new MetadataRepositoryElement[links.length]; for (int i = 0; i < links.length; i++) { element[i] = new MetadataRepositoryElement(null, new URI(links[i]), true); element[i].setNickname("Link-"+i); } ElementUtils.updateRepositoryUsingElements(element, null); 

这些链接将按字母顺序排列。

对于此问题,谷歌查询的问题很高,而且发布它的方法还不是很好:

如果有人像我一样通过Google找到这个页面,我就解决了这个问题。 您可以使用org.eclipse.equinox.internal.p2.ui.model.ElementUtils.updateRepositoryUsingElements以编程方式设置存储库。 完整代码可以在这里找到。