工件和元数据存储库管理器为空

时间:2011-08-18 13:04:13

标签: java eclipse eclipse-rcp rcp

我尝试按如下方式加载工件和元数据存储库管理器

private IArtifactRepositoryManager getArtifactRepositoryManager() {
  IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) 
     ServiceHelper.getService(ProvUIActivator.getContext(),
     IArtifactRepositoryManager.class.getName());
  if(artifactManager == null) {
    LOG.error("ArtifactRepositoryManager service nor found");
  }
  return artifactManager;
}

ServiceHelper始终返回null。是否有另一种获取存储库管理器的方法?我正在使用Eclipse / RCP 3.7(Indigo)。

之前我使用过Eclipse 3.5中的软件包,并且所有代码都能正常运行:

private IMetadataRepositoryManager getMetadataRepositoryManager() {
  //Load repository manager
  IMetadataRepositoryManager metadataManager = (IMetadataRepositoryManager) context.getService(
      context.getServiceReference(IMetadataRepositoryManager.class.getName()));
  return metadataManager;
}

2 个答案:

答案 0 :(得分:2)

我认为解决方案是确保在插件启动之前启动p2插件。相应地在产品配置中设置自动启动级别。

<configurations>
  <plugin id="my.plugin" autoStart="false" startLevel="7" />
  <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="6" />
  <plugin id="org.eclipse.equinox.p2.core" autoStart="true" startLevel="5" />
</configurations>

答案 1 :(得分:0)

我通过阅读&#34;可用软件站点&#34;的源代码找到了解决方案。偏好页面。这很简单,但你找不到任何关于它的文档:

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);

这适用于Eclipse 3.7。对于 ProvUI ProvisioningUI ,您必须导入包 org.eclipse.equinox.p2.ui org.eclipse.equinox.p2 .operations (等等)。