Eclipse wiki 中有一篇文章如何通过将静态 conf 文件添加到您的产品来配置用户的 RCP 应用程序的 p2 默认存储库:
Equinox/p2/向 RCP 应用程序添加自我更新 - 配置用户的默认存储库
当用户更改一些配置细节时,我想在 Java 类中以编程方式执行相同的操作。我找不到合适的 p2 API 文档。
Eclipse wiki 中有一篇文章如何通过将静态 conf 文件添加到您的产品来配置用户的 RCP 应用程序的 p2 默认存储库:
Equinox/p2/向 RCP 应用程序添加自我更新 - 配置用户的默认存储库
当用户更改一些配置细节时,我想在 Java 类中以编程方式执行相同的操作。我找不到合适的 p2 API 文档。
将此解决方案用于基于 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);
对于ProvUI和ProvisioningUI,您必须导入包org.eclipse.equinox.p2.ui和org.eclipse.equinox.p2.operations(以及其他)。
我找到了解决方案。这很容易 - 不幸的是没有文档......
// 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);
}
此外,您可以使用 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);
这些链接将按字母顺序排列。
这个问题在谷歌查询中很高,并且仍然没有发布的好方法:
如果有人像我一样通过谷歌找到这个页面,我已经解决了这个问题。您可以使用 org.eclipse.equinox.internal.p2.ui.model.ElementUtils.updateRepositoryUsingElements 以编程方式设置存储库。完整的代码可以在这里找到。