2009-07-29 14 views
2

Les sites de mise à jour avec RCP interdisent les plugins orphelins, sinon les plugins qui ne sont pas dans une fonctionnalité. Si cette condition n'est pas remplie, le gestionnaire de mise à jour renvoie l'erreur suivante: La configuration résultante ne contient pas la plateforme.Comment trouver des plugins orphelins dans les RCP eclipse?

Malheureusement, aucun moyen de déterminer quels plugins sont orphelins. Comment trouver des plugins orphelins?

Répondre

4

Voici un point de départ (cela s'applique à Eclipse 3.4 et versions ultérieures, lorsque le référentiel P2 a été introduit, les versions antérieures stockent leur configuration différemment.) Vous pouvez voir tous les plugins et fonctionnalités dans platform.xml). Créez un nouveau projet de plug-in (Nouveau-> Autre-> Développement de plug-in-> Projet de plug-in) avec le modèle "Hello World" puis déposez ce code dans la méthode d'exécution de SampleAction. Exécutez le plug-in en tant qu'application Eclipse de test et sélectionnez Sample Menu-> Sample Action, les plug-ins n'appartenant pas à une fonctionnalité seront affichés dans la console de l'espace de travail parent. Quand j'ai couru cela, il y en avait un peu plus que ce à quoi je m'attendais, j'ai regardé à travers et je ne peux pas repérer l'erreur de logique. Edit, erreur logique trouvée, utilisait le mauvais index de tableau utilisé dans la boucle la plus interne. Encore pas tout à fait raison.

Édition 2. (Moment Facepalm) a trouvé le problème. Veillez à exécuter l'espace de travail cible avec tous les espaces de travail et les plug-ins cibles activés activés, ou cela faussera vos résultats, évidemment. Si vous installez le plugin et l'habillez un peu, vous n'aurez pas ce problème.

//get all the plugins that belong to features 
IBundleGroupProvider[] providers = Platform.getBundleGroupProviders(); 

Map<Long, IBundleGroup> bundlesMap = new HashMap<Long, IBundleGroup>(); 

if (providers != null) { 
    for (int i = 0; i < providers.length; i++) { 
     IBundleGroup[] bundleGroups = providers[i].getBundleGroups(); 

     System.out.println("Bundle groups:"); 
     for (int j = 0; j < bundleGroups.length; j++) { 
      Bundle[] bundles = bundleGroups[j] == null ? new Bundle[0] : bundleGroups[j] 
        .getBundles(); 
      System.out.println(bundleGroups[j].getIdentifier()); 
      for (int k = 0; k < bundles.length; k++) { 
       bundlesMap.put(bundles[k].getBundleId(), bundleGroups[j]); 
      }     
     } 
    } 
} 

BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext(); 

if(bundleContext instanceof BundleContextImpl) {    
    Bundle[] bundles = ((BundleContextImpl)bundleContext).getBundles(); 

    System.out.println("Orphan Bundles:"); 
    for (int i = 0; i < bundles.length; i++) { 
     if(!bundlesMap.containsKey(bundles[i].getBundleId())) { 
      System.out.println(bundles[i].getSymbolicName()); 
     } 
    }    
} 
+0

Impressionnant ... +1 – VonC

+0

Merci beaucoup, ont réussi à déterminer quels plug-ins étaient orphelins – dilig0

+0

Vous êtes les bienvenus, mais il est ennuyeux que cela ne fait pas partie de la boîte de dialogue standard. Depuis, j'ai regardé et AboutFeaturesPage a presque exactement le même code que la première partie (juste envelopper avec quelques objets Info). Il serait trivial d'ajouter un bouton "montrer les orphelins" à cette page. –

Questions connexes