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 :

Problème de classLoader dans l'utilisation d'un plugin Eclipse


Sujet :

Eclipse Platform

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut Problème de classLoader dans l'utilisation d'un plugin Eclipse
    Bonjour.

    Je développe actuellement un plugin eclipse grâce auquel je créé de nouvelles classes java dans un workspace Eclipse. Lors de la création d'une nouvelle classe avec ce plugin, un wizard demande à l'utilisateur de sélectionner 2 classes java (du workspace en cours) à partir desquelles la nouvelle classe sera générée. Le wizard me renvoie donc 2 String contenant le nom des 2 classes (ex: package1.class1 et package2.class2).

    Je souhaite récupérer les objets Class à partir de ces 2 string, et j'utilise donc la méthode Class.forname(nomdelaclasse). Malheureusement celle-ci ne fonctionne pas dans le cas de mon plugin, semble t'il parce que le ClassLoader n'est pas le bon. Or je n'arrive pas à trouver le moyen de récupérer le bon classLoader qui me permettrait de récupérer les 2 classes du workspace à partir de leurs noms.

    Je galère à trouver une solution sur le net, donc si quelqu'un pouvait me dépanner ce serait super. Merci d'avance!

  2. #2
    Membre éclairé Avatar de gmotw
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 384
    Par défaut
    Est-ce que tu as bien le bon chemin pour tes fichiers class? (genre il ne cherche pas dans le workspace?)
    Qu'est-ce qu'il se passe si tu indiques le chemin entier?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    En fait je donne à la méthode forName() le nom de la classe sous la forme "package1.package2.maClass"

    Je viens d'essayer de lui donner le chemin absolu du fichier .class, et j'ai également tenté de créer un URLClassLoader avec ce chemin absolu, mais les 2 tentatives ont échouées.

  4. #4
    Membre éclairé Avatar de gmotw
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 384
    Par défaut
    J'ai vu qu'il y avait un BaseClassLoader.

    Sinon, sur la doc de classloader, ils ont l'air d'expliquer comment utiliser la classe, si tu n'as pas déjà vu ça.
    http://www.jdocs.com/javase/7.b12/ja...assLoader.html

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Oui merci, j'ai déjà lu cette doc. Ce que j'aurai aimé c'est pouvoir récupérer le bon ClassLoader. Comme je ne peux pas, j'essaye actuellement de créer mon propre classLoader, mais cette solution ne me semble pas être la plus adéquat et je ne suis pas sur que cela marchera.

  6. #6
    Membre éclairé Avatar de gmotw
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 384
    Par défaut
    Tu as bien un DefaultClassLoader qui peut être pas mal, mais c'est en interne. A la limite, tu fais un copier-coller pour ton loader perso?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Comment faire pour récupérer le code du DefaultClassLoader?

  8. #8
    Membre éclairé Avatar de gmotw
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 384
    Par défaut
    Ben en fait, j'ai récupéré les sources d'Eclipse et je tape directement dedans..

    ou sinon:
    http://www.jdocs.com/eclipse/3.1/org...assLoader.html
    (décidemment, j'adore ce site)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Ok merci pour ton aide, j'ai créé mon propre class loader finalement qui charge le fichier .class et crée un objet class avec.

    Maintenant j'ai un autre soucis: sais-tu comment accéder à une ressource contenu dans mon plugin ? En gros j'utilise Velocity et un template 'myTemplate.vm' qui se trouve dans mon plugin, malheureusement quand je souhaite charge ce template depuis mon plugin, je reçoit une erreur comme quoi la ressource est introuvable. J'ai utilisé le bundle de mon plugin pour récupérer le chemin du fichier mais cela n'a rien changé.

  10. #10
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    bonjour,
    Un peu tard et hors sujet je crains, mais juste pour signaler que ton problème initial venait probablement du fait que tu es dans un environnement OSGi, et qu'ainsi, chaque Bundle a son propre ClassLoader distinct qui ne voit pas les classes de l'extérieux, à moins qu'il n'y ait les Import-Package correspondants.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Par défaut
    le code pour accèder à un fichier dans le plugin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Bundle bundle = Platform.getBundle(pluginId);
    		URL locationUrl = FileLocator.find(bundle,new Path(path), null);
    		URL fileUrl = null;
    		File res = null;
     
    		try {
    			fileUrl = FileLocator.toFileURL(locationUrl);
    			fileUrl.getFile();
    			res = new File(fileUrl.getFile());
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		}
            return res;
    en effet, chaque plugin à son propre class loader,
    qui n'à accès qu'à ce qui se trouve dans le bundle classpath, cad uniquement aux classes et dépendances du plugin.
    hors les classes que tu essaies de charger viennent du workspace
    du point de vue du plugin, ce ne sont que des fichiers, pas des classes
    il faut un autre class loader, voir comment fait jdt

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Merci pour vos réponses !

    J'ai réussi à récupérer mon fichier ressource, mais en fait je faisais bien comme blackwizard l'a indiqué, mon problème venait de la gestion des ressources par Velocity. Problème réglé maintenant en ne passant pas par le gestionnaire de resources de Velocity.

    Pour le classLoader, je garde pour le moment celui que j'ai fait et qui marche bien, quand je voudrai mettre ça au propre j'irai voir comment jdt gère la chose.

Discussions similaires

  1. Réponses: 18
    Dernier message: 22/08/2014, 16h35
  2. [CRM 2011] probléme de sécurité dans un développement d'un plugin
    Par ifrit 23 dans le forum Microsoft Dynamics CRM
    Réponses: 1
    Dernier message: 08/08/2012, 14h28
  3. Problème de ClassLoader dans l'utilisation d'un plugin Eclipse
    Par hanial dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 08/07/2011, 10h47
  4. Problème dans l'utilisation du WebBrowser
    Par MCShiff dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/01/2007, 12h52
  5. probléme dans l'utilisation d'un tableau
    Par hamoudasafira dans le forum C++
    Réponses: 10
    Dernier message: 13/12/2006, 08h50

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