2011-08-18 3 views
1

다음과 같이 이슈 및 메타 데이터 저장소 관리자를로드하려고합니다.아티팩트 및 메타 데이터 저장소 관리자가 null입니다.

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

답변

0

내가 "사용 가능한 소프트웨어 사이트"환경 설정 페이지의 소스 코드를 읽어 해결책을 발견했다. 그것은 쉽지만 그것에 관한 문서를 찾을 수는 없습니다 :

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.uiorg.eclipse.equinox.p2.operations (다른 사람의 사이에서).

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> 
관련 문제