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>