Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment charger des jars dynamiquement?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Comment charger des jars dynamiquement?

n°521813
veryfree
Posté le 23-09-2003 à 23:34:18  profilanswer
 

Le but etant de les ajouter au classpath.  
je m'explique, je veux crée un repertoire "plugins" dans lequel il y aurai des jars qui pourrons etre appelé via le prog principal ( un peu comme ANT en fait , il suffis d'ajouté un librairie dans ANT/lib pour qu'elle soit automatiquement prise en compte...)
greg m a suggéré de regarder ici , le prob c'est que ca fait pas ce que je veux ou alors je m'y prend mal :/
 
 
quelqu'un a peut etre deja developpé ce genre de chose  :whistle:  
 
 
merci de votre aide


Message édité par veryfree le 24-09-2003 à 00:17:35
mood
Publicité
Posté le 23-09-2003 à 23:34:18  profilanswer
 

n°521814
schnapsman​n
Zaford Beeblefect
Posté le 23-09-2003 à 23:37:52  profilanswer
 

jarclassloader c'est facile à utiliser et ça fait ce que tu veux, en fait c'est tout trouvé :heink: , same player shoot again  :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°521815
darklord
You're welcome
Posté le 23-09-2003 à 23:42:03  profilanswer
 

bin oui [:spamafote]


---------------
Just because you feel good does not make you right
n°521819
veryfree
Posté le 23-09-2003 à 23:51:24  profilanswer
 

ben je pensait aussi mais non.
 
si je fait  
 

Code :
  1. URL url = new URL("jar:file:/" + plugins + "!/" );
  2. JarURLConnection jarConnection = (JarURLConnection)url.openConnection();
  3. for (Enumeration e = jarConnection.getJarFile().entries(); e.hasMoreElements() ;) {
  4.            System.out.println(e.nextElement());
  5.        }


ici ,il m'affiche toute les entrées du jar mais impossible d'instancier un objet de l'archive :o

n°521820
schnapsman​n
Zaford Beeblefect
Posté le 23-09-2003 à 23:57:08  profilanswer
 

bein où c'est que t'as vu que JarURLConnection était un class loader?  :heink:  
 
au pire si tu veux vraiment utiliser cette classe, tu extrait les .class avec elle et tu les load avec ClassLoader, et basta.


Message édité par schnapsmann le 23-09-2003 à 23:57:30

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°521821
veryfree
Posté le 23-09-2003 à 23:59:34  profilanswer
 

SchnapsMann a écrit :

bein où c'est que t'as vu que JarURLConnection était un class loader?  :heink:  
 
au pire si tu veux vraiment utiliser cette classe, tu extrait les .class avec elle et tu les load avec ClassLoader, et basta.


 
avec quoi alors?
 
ton objet jarclassloader n'existe meme pas!
 

Citation :

jarclassloader c'est facile à utiliser et ça fait ce que tu veux, en fait c'est tout trouvé :heink: , same player shoot again  :o

n°521822
schnapsman​n
Zaford Beeblefect
Posté le 24-09-2003 à 00:00:26  profilanswer
 

http://java.sun.com/docs/books/tut [...] oader.html
 
ah?  :whistle:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°521826
veryfree
Posté le 24-09-2003 à 00:13:35  profilanswer
 


je persiste, il n'existe pas :o  


JApplet
JarEntry
JarException
JarFile
JarInputStream
JarOutputStream
JarURLConnection


 
trouve moi le lien vers la javadoc et on en reparle :o


Message édité par veryfree le 24-09-2003 à 00:15:42
n°521829
darklord
You're welcome
Posté le 24-09-2003 à 00:20:39  profilanswer
 

Utilie URLClassLoader gros boolay. Ca fait 2h que je te l'ai déjà dit :o


---------------
Just because you feel good does not make you right
n°521830
veryfree
Posté le 24-09-2003 à 00:23:25  profilanswer
 

DarkLord a écrit :

Utilie URLClassLoader gros boolay. Ca fait 2h que je te l'ai déjà dit :o


 
j'ai essayé et ca marche toujours pas ton truc  
 
 :whistle:


Message édité par veryfree le 24-09-2003 à 00:25:25
mood
Publicité
Posté le 24-09-2003 à 00:23:25  profilanswer
 

n°521834
darklord
You're welcome
Posté le 24-09-2003 à 00:35:12  profilanswer
 

veryfree a écrit :


 
j'ai essayé et ca marche toujours pas ton truc  
 
 :whistle:


 

Code :
  1. public static void main(String[] args) throws Exception {
  2.         File f = new File("log4j-1.2.5.jar" );
  3.         if (!f.exists()) {
  4.             System.out.println("FATAL: test lib not found" );
  5.             System.exit(-1);
  6.         }
  7.         URL testJar = f.toURL();
  8.         try {
  9.             Class.forName("org.apache.log4j.Logger" );
  10.             System.out.println("Should have thrown a NoClassDefFoundError" );
  11.         } catch (ClassNotFoundException e) {
  12.             System.out.println("The logger objet was not found" );
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.         URLClassLoader myClassLoader = new URLClassLoader(new URL[]{testJar});
  17.         try {
  18.             Class.forName("org.apache.log4j.Logger" );
  19.         } catch (ClassNotFoundException e) {
  20.             System.out.println("The logger objet was not found after class loading" );
  21.         } catch (Exception e) {
  22.             e.printStackTrace();
  23.         }
  24.     }


 

Citation :


F:\>java -classpath . Test
The logger objet was not found
The logger objet was not found after class loading


 
:/


Message édité par darklord le 24-09-2003 à 00:47:10

---------------
Just because you feel good does not make you right
n°521835
darklord
You're welcome
Posté le 24-09-2003 à 00:46:04  profilanswer
 

pourtant ca devrait marcher
http://forum.java.sun.com/thread.j [...] ge=1525724


---------------
Just because you feel good does not make you right
n°521844
the real m​oins moins
Posté le 24-09-2003 à 01:15:00  profilanswer
 

putain vous allez pas me faire chier à 1h30 du mat quand meme [:benou]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°521847
the real m​oins moins
Posté le 24-09-2003 à 01:18:49  profilanswer
 

au fait faudrait ptet apprendre à lire un peu un lien hein
 
http://java.sun.com/docs/books/tut [...] oader.java
 
genre retourner au debut de la leçon ça mange pas de pain :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°521849
benou
Posté le 24-09-2003 à 01:20:59  profilanswer
 

DarkLord a écrit :

pourtant ca devrait marcher


ben moi je trouverais ca bizare que ca marche : comment le Class.forName peut savoir qu'il doit utiliser le classloader que tu viens de créer ??  
avec ca ca dervait mieux marcher :

Code :
  1. Class.forName("org.apache.log4j.Logger", myClassLoader );


 
j'ai regardé dans le doc : si tu indique pas le classloader, il utiliser le classloader qui a servit à charger la class courante => ici c'est le classloader system => ca ne peut pas marcher ...
 
[/quote]
For example, in an instance method the expression:  
Class.forName("Foo" )
 is equivalent to:  
  Class.forName("Foo", true, this.getClass().getClassLoader())[/quote]


---------------
ma vie, mon oeuvre - HomePlayer
n°521851
benou
Posté le 24-09-2003 à 01:22:50  profilanswer
 


je vois pas l'intérêt de surcharger URLCLassLoader à la place de simplement l'utiliser  :heink:


---------------
ma vie, mon oeuvre - HomePlayer
n°521854
the real m​oins moins
Posté le 24-09-2003 à 01:32:23  profilanswer
 

package test.packalacon;
 
import java.net.URL;
import java.net.URLClassLoader;
import java.io.File;
import java.io.FileNotFoundException;
 
public class TestJarLoader {
    private static final String classname = "org.apache.log4j.ConsoleAppender";
 
    public static void main(String[] args) throws Exception {
        File f = new File("log4j.jar" );
        if (!f.exists()) {
            throw new FileNotFoundException("he ho tu te fous de qui..." );
        }
 
        URL url = f.toURL(); // j'aime bien le source de cette methode, notamment le nom d'une des methodes qui y est appelée :lol:
 
        URLClassLoader ucl = new URLClassLoader(new URL[] {url} );
        Class c = ucl.loadClass(classname);
        Object o = c.newInstance();
 
        System.out.println("o.getClass().getName() = " + o.getClass().getName());
    }
}

:hello:

n°521855
the real m​oins moins
Posté le 24-09-2003 à 01:33:15  profilanswer
 

benou a écrit :


je vois pas l'intérêt de surcharger URLCLassLoader à la place de simplement l'utiliser  :heink:  

parce qu'ils y ajoutent 2 methodes à la con; en effet ça n'a aucun interet d'y *ajouter* ces methodes...
peu importe:)

n°521856
the real m​oins moins
Posté le 24-09-2003 à 01:34:50  profilanswer
 

dans la methode loadClass de ClassLoader, y'a un truc qui me laisse perplexe, c'est le boolean "resolve"... je comprend pas à quoi ça sert, et la javadoc est on ne peut plus claire:

Citation :

resolve : If <tt>true</tt> then resolve the class

[:boidleau]

n°522280
veryfree
Posté le 24-09-2003 à 15:49:59  profilanswer
 

j'essaye ca qd je peux :jap:

n°522284
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 24-09-2003 à 15:52:59  profilanswer
 

the real moins moins a écrit :

dans la methode loadClass de ClassLoader, y'a un truc qui me laisse perplexe, c'est le boolean "resolve"... je comprend pas à quoi ça sert, et la javadoc est on ne peut plus claire:

Citation :

resolve : If <tt>true</tt> then resolve the class

[:boidleau]


T'as maté ce que faisait la méthode resolveClass ?

Citation :

protected final void resolveClass(Class c)
 
    Links the specified class. This (misleadingly named) method may be used by a class loader to link a class. If the class c has already been linked, then this method simply returns. Otherwise, the class is linked as described in the "Execution" chapter of the Java Language Specification.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°522285
benou
Posté le 24-09-2003 à 15:53:04  profilanswer
 

veryfree a écrit :

j'essaye ca qd je peux :jap:


sinon prend le code de dark : y a juste à rajouter le classloader créé en paramêtre du Class.forName ...


---------------
ma vie, mon oeuvre - HomePlayer
n°522290
the real m​oins moins
Posté le 24-09-2003 à 15:57:01  profilanswer
 

benou a écrit :


sinon prend le code de dark : y a juste à rajouter le classloader créé en paramêtre du Class.forName ...

et le mien y marche hein [:mmmfff]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522291
the real m​oins moins
Posté le 24-09-2003 à 15:57:40  profilanswer
 

Taiche a écrit :


T'as maté ce que faisait la méthode resolveClass ?

ben ui mais je comprend pas :o
et puis ça delegue à une methode native donc c'est pas gagné pour comprendre plus...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522293
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 24-09-2003 à 15:58:44  profilanswer
 

the real moins moins a écrit :

ben ui mais je comprend pas :o
et puis ça delegue à une methode native donc c'est pas gagné pour comprendre plus...


Ba ça fait ce que fait un linker dans un compilo, je suppose [:spamafote] Maintenant, je saurais pas t'en dire plus mais demande à chrisbk, il a l'air de connaître ce genre de conneries :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°522294
benou
Posté le 24-09-2003 à 15:59:02  profilanswer
 

the real moins moins a écrit :

et le mien y marche hein [:mmmfff]


ouais, ca revient au même [:spamafote] ...  
c'était juste au cas où il est pas vu le pourquoi du darkbug ;)


---------------
ma vie, mon oeuvre - HomePlayer
n°522297
the real m​oins moins
Posté le 24-09-2003 à 15:59:46  profilanswer
 

Taiche a écrit :


Ba ça fait ce que fait un linker dans un compilo, je suppose [:spamafote] Maintenant, je saurais pas t'en dire plus mais demande à chrisbk, il a l'air de connaître ce genre de conneries :o

haaaaan mais jcomprend pas jte dis :sweat:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522301
the real m​oins moins
Posté le 24-09-2003 à 16:00:53  profilanswer
 

au fait, une fois que t'as fait le Class.forName ou le ClassLoader.loadClass, la classe est appelable "normalement", ou bien faut repasser par le classloader à chaque fois?
(Ou bien il faut "registrer" ton classloader non?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522316
veryfree
Posté le 24-09-2003 à 16:13:10  profilanswer
 

benou a écrit :


sinon prend le code de dark : y a juste à rajouter le classloader créé en paramêtre du Class.forName ...


oui voila , je comptait faire un mix de vos deux reponses :)
 
 

n°522317
the real m​oins moins
Posté le 24-09-2003 à 16:13:33  profilanswer
 

[:mmmfff]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522335
El_gringo
Posté le 24-09-2003 à 16:28:36  profilanswer
 

the real moins moins a écrit :

au fait, une fois que t'as fait le Class.forName ou le ClassLoader.loadClass, la classe est appelable "normalement", ou bien faut repasser par le classloader à chaque fois?
(Ou bien il faut "registrer" ton classloader non?)


 
Ben, à mon avis, une fois qu'elle est chargée, elle est chargée, comme n'importe quelle autre classe. On va pas la charger 50 fois...
Bref, après on l'utilise "normalement"!

n°522341
benou
Posté le 24-09-2003 à 16:36:03  profilanswer
 

El_gringo a écrit :


Ben, à mon avis, une fois qu'elle est chargée, elle est chargée, comme n'importe quelle autre classe. On va pas la charger 50 fois...
Bref, après on l'utilise "normalement"!


nan je pense pas moi ...  
<a vérifier mais je suis quasi sûr>
quand tu rentres dans une classe A, elle charge les classes pour lesquelles y a des références dans la classe A. ex : si A fait référence à B, C, D. Ca va executer le code
A.getClass().getClassLoader().loadClass("B" );
A.getClass().getClassLoader().loadClass("C" );
A.getClass().getClassLoader().loadClass("D" );
 
donc ca va utiliser le classloader qui a servit à loader la classe.
</a vérifier mais je suis quasi sûr>
Donc si ce qui est au dessus est vrai, y a aucune raison que dans la suite de ton programme la classe du jar chargée dynamiquement soit connu par les classes de ton prog.
Par contre si cette classe (chargée dynamiquement) fait référence à des classes d'autres jars (indiqué dans le tableau d'URL) chargés par le même classloader, elle pourra les trouver.
 
edit : en fait je m'aperçoit que j'ai mal comprit ce que tu disais gringo : ouais la classe on peut l'utiliser comme n'importe quelle classe. C'est si on veut instancier un nouvel object de la même classe qu'il faudra réutiliser le classloader


Message édité par benou le 24-09-2003 à 16:37:30

---------------
ma vie, mon oeuvre - HomePlayer
n°522351
the real m​oins moins
Posté le 24-09-2003 à 16:44:02  profilanswer
 

ouais enfin sauf que le class.forName ou le CL.loadClass n'instancie pas la classe ;)
 
y'a pas un truc pour "registrer" un classLoader dans la hierarchie des classloaders existants?
 
bon y'a moyen de setter un parent a mon classloader, mais pas l'inverse, donc si je comprend bien, je devrais *tjs* repasser par mon classloader maison pour charger un truc, pas moyen que ça se fasse tout seul...


Message édité par the real moins moins le 24-09-2003 à 16:50:11

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522355
benou
Posté le 24-09-2003 à 16:47:27  profilanswer
 

the real moins moins a écrit :

ouais enfin sauf que le class.forName ou le CL.loadClass n'instancie pas la classe ;)


 :??: j'ai jamais dit ca  

the real moins moins a écrit :


y'a pas un truc pour "registrer" un classLoader dans la hierarchie des classloaders existants?  


Si ce que j'ai dit au dessus est vrai ca ne changerai rien : la hierarchie des classloader se fait d'elle même en fonction du classloader qui a chargé les classes


---------------
ma vie, mon oeuvre - HomePlayer
n°522469
veryfree
Posté le 24-09-2003 à 18:52:40  profilanswer
 

en fait je me suis peut etre mal exprimé mais ce class.forName() ne correspond pas a ce que je veux faire , en effet lorsque je dev mon plugin j'ai acces a ce fichier jar ,donc je peux faire par ex:
 
import bidule.machin.RE;
 
Re reg = new RE("bla" );
 
le probleme, c'est que lorsque je vais lancé mon prog qui va appelé le plug in , le jar ne pourra pas se trouvé dans le classpath puisque celui doit etre défini dans la ligne de commande et que le plug in est chargé dynamiquement...
 
désolé si c'est pas tres clair , mais en gros le jar doit etre mis a la volé dans le classpath , et l'instanciation des objets qu'il contiens pourras se faire de facon standard ...

n°522471
darklord
You're welcome
Posté le 24-09-2003 à 18:59:15  profilanswer
 

bin tu dois charger ton jar avant meme d'invoquer quoi que ce soit sur l'objet sinon tu vas te manger une erreur si tu as des
 
import LaClassACharger
 
S.


---------------
Just because you feel good does not make you right
n°522479
the real m​oins moins
Posté le 24-09-2003 à 19:16:09  profilanswer
 

je crois que le veryfree y'a un ptit truc qui lui a echapé dans son idée de plugin là  [:core 666]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522485
darklord
You're welcome
Posté le 24-09-2003 à 19:20:14  profilanswer
 

the real moins moins a écrit :

je crois que le veryfree y'a un ptit truc qui lui a echapé dans son idée de plugin là  [:core 666]  


 
+1


---------------
Just because you feel good does not make you right
n°522487
veryfree
Posté le 24-09-2003 à 19:24:25  profilanswer
 

expliquez moi alors je vous prie , je suis la pour apprendre moi  :o

n°522489
the real m​oins moins
Posté le 24-09-2003 à 19:34:17  profilanswer
 

ben t'auras une interface Plugin, probablement. Tu vas vouloir en loader dynamiquement des implementations.
 
Tu vas pas coder en dur dans ton soft TrucPlugin tp = new TrucPlugin();
 
...
par contre dans ton plugin tu pourrais utiliser d'autres classes du jar sans probleme.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment charger des jars dynamiquement?

 

Sujets relatifs
Proposer un fichier créé dynamiquement en téléchargementliste déroulante modifiant dynamiquement 2e liste déroulante
[JAVA] Mécanisme pour charger des JAR à la demandeAjouter dynamiquement un control dans un form
Charger une image depuis un stream... pkoi ca foire avec un TPicture ?[flash] charger une image externe
Probleme pour générer dynamiquement une expression[Javascript] Créer dynamiquement une meta refresh en JS...
[php][forum] Insérer dynamiquement le retour à la ligne[vb.net ou c#] charger un document [resolu]
Plus de sujets relatifs à : Comment charger des jars dynamiquement?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR