IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Platform Discussion :

La recherche d'un IClasspathEntry dans un IClassPathContainer échoue parfois


Sujet :

Eclipse Platform

  1. #1
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut La recherche d'un IClasspathEntry dans un IClassPathContainer échoue parfois
    Salut,

    Dans le cadre d'une extension d'un projet WTP, lors de l'installation de ma facet, je cherche à installer automatiquement la javadoc sur des jars précédemment copiés programmatiquement dans le dossier WEB-INF/lib, créé lui aussi programmatiquement. Pour cela, j'ai écrit cette méthode, pour chercher le IClasspathEntry correspondant au jar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static Optional<IClasspathEntry> findEntryInContainer(final IClasspathContainer container, final IPath libPath) {
       final IClasspathEntry[] entries= container.getClasspathEntries();
       for (int i= 0; i < entries.length; i++) {
          final IClasspathEntry curr = entries[i];
          final IClasspathEntry resolved = JavaCore.getResolvedClasspathEntry(curr);
          if (resolved != null && libPath.equals(resolved.getPath())) {
             return Optional.of(curr); // return the real entry
          }
       }
       return Optional.empty(); // attachment not possible
    }
    Cela fonctionne sauf à de très rares occasions, où l'entrée n'est pas trouvée. Comme c'est rare, je ne parviens pas le reproduire en débogage (j'ai essayé 10 fois, mais je n'ai pas insisté). Je ne sais pas si c'est parce que resolved peut être null ou pas, malgré que que curr corresponde bien à libPath. J'ai ajouté une trace pour observer ce cas lorsque le bogue apparaîtra.
    Il est en revanche certain que je passe par cette méthode (le IClasspathContainer est lui forcément trouvé (correspondant à WEB-INF/lib).

    J'essaye donc de comprendre pourquoi mon jar n'est pas trouvé à chaque fois. Est-ce que ça pourrait venir du fait que la construction du classpath est asynchrone ? Dans ce cas, comment m'assurer que je fais bien ce travail au bon moment (synchronisation sur un job, évènement ?). Est-ce que ce serait une mauvaise compréhension de ma part de getResolvedClasspathEntry() ?
    Y aurait-il une autre façon de procéder pour récupérer le IClasspathEntry ? Ou même d'installer la javadoc programmatiquement ?

    Merci par avance de vos avis.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En creusant, je me suis aperçu que ça fonctionnait quand je créais un projet que j'avais déjà créé auparavant puis supprimé. Et quand ça ne fonctionne pas, le projet est forcément nouveau (un nom jamais utilisé). Enfin, j'ai l'impression au vu d'une vingtaine de tests successifs. Donc l'hypothèse de la génération du classpath en asynchrone pourrait être la bonne.
    En conséquence, je force un refresh() sur le Classpath Container. Et ça semble fonctionner (je n'ai pas fait énormément de tests pour le moment, l'avenir me le confirmera ou pas). C'est une solution qui me plait moyen, parce que la méthode est dans FlexibleProjectContainer, une classe internal. Mais je n'ai pas le temps de réécrire la méthode moi-même pour le moment, surtout que je trouve dommage de réécrire quelque chose qui existe déjà (je trouve très dommage que la plupart des classes utilitaires de WTP soient internal).
    J'attends un peu de voir ce que ça donne avant de passer le sujet en résolu.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [JAR] Recherche d'1 image dans un JAR différent
    Par tomburn dans le forum Général Java
    Réponses: 5
    Dernier message: 26/04/2005, 15h28
  2. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39
  3. ASp - recherche d'un champs dans une base.
    Par kmayoyota dans le forum ASP
    Réponses: 5
    Dernier message: 03/12/2004, 15h03
  4. les jars dans l'arborescence
    Par freddyboy dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/01/2004, 10h38
  5. Recherche d'un String dans un String ?
    Par apen2k2 dans le forum Langage
    Réponses: 9
    Dernier message: 14/04/2003, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo