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

Java Discussion :

Charger les classes d'un Jar incluses dans un Jar


Sujet :

Java

  1. #1
    Membre du Club Avatar de daronmaster
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 67
    Points : 56
    Points
    56
    Par défaut Charger les classes d'un Jar incluses dans un Jar
    Bonjour tout le monde,

    Je cherche à savoir comment la JVM charge les classes d'un jar en dépendance d'un autre.

    Je sais que le fichier MANIFEST y est pour beaucoup avec son attribut Class-Path mais j'aimerai en faire de même.

    J'expose mon problème:

    Pour un projet sur lequel je travail, je dois réaliser un mécanisme de plugin.

    Depuis mon programme principale, lorsque celui démarre je vais scruter un répertoir dans lequel sont censés être mes plugins sous forme de Jars.

    Ensuite pour chacun de ces Jars, je lis un fichier XML (inclus dans le Jar) pour savoir quelle est la classe principale que je dois charger. Jusque là tout va bien, car ce n'est pas compliqué.

    Là où ça se complique c'est que si dans le fichier MANIFEST, s'il y a l'attribut Class-Path alors cela signifie que le plugin que je cherche à charger dépend d'autre Jar inclus dans ce même Jar. Voici un exemple d'arborescence possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    monPlugin.jar ------ + --- monPackage
                         |          |
                         |          + main.class
                         |          + ...
                         |
                         + --- META-INF
                         |          |
                         |          + --- MANIFEST.MF
                         + --- lib
                                 |
                                 + dependance1.jar
                                 + dependance2.jar
    La solution que j'ai actuellement consiste à copier dependance1.jar et dependance2.jar dans un répertoire temporaire et à réiterer le processus tant que les dépendances en possèdent elles-mêmes. Et une fois les dépendances chargées (je liste tous les .class des jars et je les charge avec un URLClassLoader), je charge la classe principale de mon plugin.

    Bon, d'une part je trouve ça moyen car je ne pense pas que la JVM décompresse les jars pour en extraire les dépendances pour ensuite les charger, et d'autre part il se peut que dans les dépendances, l'attibut "Sealed" du manifest soit à "true" dans quel cas je ne peut charger les classes de cette dépendance.

    Donc si vous avez une solution à mon problème je suis preneur.

    Ah oui j'allais oublié: lorsque je lance mon porgramme principale, je ne veux pas mettre les jars des plugins sur la ligne de commande pour les ajouter au classpath (je vous voyais venir bande de petits malins ... ).

    Si vous avez des questions, j'y répondrais pour vous éclaircir sur mon problème.

    Merci
    Tchû

  2. #2
    Membre du Club Avatar de daronmaster
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 67
    Points : 56
    Points
    56
    Par défaut
    Après de nombreuses recherches, je n'ai pas trouvé de solutions propres à mon problème.

    Cependant, j'ai codé une solution :

    ne pouvant pas lire directement un jar inclus dans un autre, j'ai choisi de dézipper temporairement les dépendances (et ce de manière récursive) dans un répertoire que je référence ensuite dans l'URLClassLoader que j'utilise pour charger la classe principale de de mon Jar.

    Voilà, si vous avez des questions, je tâcherai d'y répondre (à oui, j'allais oublié, une fois que je n'ai plus besoin de ce répertoire, je le vide et ensuite je le supprime (tjs depuis le code java))

    Tchû
    Tchû

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Salut,
    Je ne sais pas comment tu as codé ta solution, mais peut être que tu aurais pu essayer de te faire ton propre classloader ( http://java.sun.com/developer/online...ader/help.html ) qui recherche les classes récursivement dans les jar.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jar inclus dans un Jar ou pas?
    Par lextaz33 dans le forum Général Java
    Réponses: 2
    Dernier message: 30/09/2009, 11h24
  2. Charger dynamiquement une classe qui n'est pas dans un jar
    Par rastakouair dans le forum Langage
    Réponses: 12
    Dernier message: 17/12/2007, 19h22
  3. [ClassLoader]Charger les classes d'un Jar
    Par GLDavid dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2007, 17h22
  4. [JNI] : Obtenir les champs d'un objet inclus dans un objet
    Par jojo29 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2006, 13h36
  5. [JAR]Inclusion de fichiers jar dans la construction d'un jar
    Par elspliffo dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 28/10/2005, 10h01

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