Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 工件和元数据存储库管理器为空_Java_Eclipse_Eclipse Rcp_Rcp - Fatal编程技术网

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

Java 工件和元数据存储库管理器为空,java,eclipse,eclipse-rcp,rcp,Java,Eclipse,Eclipse Rcp,Rcp,我尝试加载工件和元数据存储库管理器,如下所示 private IArtifactRepositoryManager getArtifactRepositoryManager() { IArtifactRepositoryManager artifactManager = (IArtifactRepositoryManager) ServiceHelper.getService(ProvUIActivator.getContext(), IArtifactReposito

我尝试加载工件和元数据存储库管理器,如下所示

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/RCP3.7(Indigo)

我以前使用过Eclipse3.5中的捆绑包,所有这些代码都很好:

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

我通过阅读“可用软件站点”首选项页面的源代码找到了解决方案。这很简单,但您找不到任何关于它的文档:

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

这适用于Eclipse3.7。对于ProvUI和ProvisioningUI,您必须导入捆绑包org.eclipse.equinox.p2.ui和org.eclipse.equinox.p2.operations(以及其他)。我认为解决方案是确保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>