2015-11-02 2 views
0

J'essaye d'utiliser l'éclipse P2 pour activer un outil de mien pour la mise à jour automatique sur le démarrage d'éclipse. Ce faisant, je veux utiliser un UpdateOperation qui ne convient qu'à "my" avec l'identifiant "my.feature.id". Chaque fois que cette requête est émise dans une installation Eclipse, elle a un résultat vide et donc rien à mettre à jour. Donc, comment utiliser le droit QueryUtil pour obtenir une collection contenant uniquement ma fonctionnalité pour la mise à jour en tant qu'entrée pour une UpdateOperation?Eclipse P2 IUQuery a toujours un résultat vide

La méthode suivante est appelée lorsque l'on veut commencer la mise à jour Eclipse démarrage:

public class P2Util { 
    public static IStatus checkForUpdates(IProvisioningAgent agent, IProgressMonitor monitor) { 
     ProvisioningSession session = new ProvisioningSession(agent); 
     IQuery<IInstallableUnit> query = QueryUtil.createLatestQuery(QueryUtil.createIUQuery("my.feature.id")); 
     UpdateCheckActivator.info("Update Query Expression: " + query.getExpression()); 
     IProfileRegistry registry= (IProfileRegistry)agent.getService(IProfileRegistry.SERVICE_NAME); 
     IProfile profile= registry.getProfile(IProfileRegistry.SELF); 
     IQueryResult<IInstallableUnit> result = profile.query(query, monitor); 
     Set<IInstallableUnit> unitsForUpdate = result.toUnmodifiableSet(); 
     UpdateOperation operation = new UpdateOperation(session, unitsForUpdate); 
    } 
} 

Répondre

0

La solution est très simple mais déroutant au premier abord. La requête essayant de trouver des fonctionnalités avec "my.feature.id" demandait le mauvais identifiant.

Dans le feature.xml de ma fonctionnalité c'est "my.feature.id" mais l'unité installable obtient pour des raisons non évidentes le suffixe "feature.group". Si on ajoute ceci à l'id dans la requête, vous obtenez le résultat correct et l'opération de mise à jour réussit comme prévu.