Comment charger des jars dynamiquement? - Java - Programmation
Marsh Posté le 23-09-2003 à 23:37:52
jarclassloader c'est facile à utiliser et ça fait ce que tu veux, en fait c'est tout trouvé , same player shoot again
Marsh Posté le 23-09-2003 à 23:42:03
bin oui
Marsh Posté le 23-09-2003 à 23:51:24
ben je pensait aussi mais non.
si je fait
Code :
|
ici ,il m'affiche toute les entrées du jar mais impossible d'instancier un objet de l'archive
Marsh Posté le 23-09-2003 à 23:57:08
bein où c'est que t'as vu que JarURLConnection était un class loader?
au pire si tu veux vraiment utiliser cette classe, tu extrait les .class avec elle et tu les load avec ClassLoader, et basta.
Marsh Posté le 23-09-2003 à 23:59:34
SchnapsMann a écrit : bein où c'est que t'as vu que JarURLConnection était un class loader? |
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é , same player shoot again |
Marsh Posté le 24-09-2003 à 00:00:26
http://java.sun.com/docs/books/tut [...] oader.html
ah?
Marsh Posté le 24-09-2003 à 00:13:35
je persiste, il n'existe pas
|
trouve moi le lien vers la javadoc et on en reparle
Marsh Posté le 24-09-2003 à 00:20:39
Utilie URLClassLoader gros boolay. Ca fait 2h que je te l'ai déjà dit
Marsh Posté le 24-09-2003 à 00:23:25
DarkLord a écrit : Utilie URLClassLoader gros boolay. Ca fait 2h que je te l'ai déjà dit |
j'ai essayé et ca marche toujours pas ton truc
Marsh Posté le 24-09-2003 à 00:35:12
veryfree a écrit : |
Code :
|
Citation : |
Marsh Posté le 24-09-2003 à 00:46:04
pourtant ca devrait marcher
http://forum.java.sun.com/thread.j [...] ge=1525724
Marsh Posté le 24-09-2003 à 01:15:00
putain vous allez pas me faire chier à 1h30 du mat quand meme
Marsh Posté le 24-09-2003 à 01:18:49
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
Marsh Posté le 24-09-2003 à 01:20:59
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 :
|
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]
Marsh Posté le 24-09-2003 à 01:22:50
je vois pas l'intérêt de surcharger URLCLassLoader à la place de simplement l'utiliser
Marsh Posté le 24-09-2003 à 01:32:23
package test.packalacon; |
Marsh Posté le 24-09-2003 à 01:33:15
benou a écrit : |
parce qu'ils y ajoutent 2 methodes à la con; en effet ça n'a aucun interet d'y *ajouter* ces methodes...
peu importe
Marsh Posté le 24-09-2003 à 01:34:50
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 |
Marsh Posté le 24-09-2003 à 15:52:59
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:
|
T'as maté ce que faisait la méthode resolveClass ?
Citation : protected final void resolveClass(Class c) |
Marsh Posté le 24-09-2003 à 15:53:04
veryfree a écrit : j'essaye ca qd je peux |
sinon prend le code de dark : y a juste à rajouter le classloader créé en paramêtre du Class.forName ...
Marsh Posté le 24-09-2003 à 15:57:01
benou a écrit : |
et le mien y marche hein
Marsh Posté le 24-09-2003 à 15:57:40
Taiche a écrit : |
ben ui mais je comprend pas
et puis ça delegue à une methode native donc c'est pas gagné pour comprendre plus...
Marsh Posté le 24-09-2003 à 15:58:44
the real moins moins a écrit : ben ui mais je comprend pas |
Ba ça fait ce que fait un linker dans un compilo, je suppose Maintenant, je saurais pas t'en dire plus mais demande à chrisbk, il a l'air de connaître ce genre de conneries
Marsh Posté le 24-09-2003 à 15:59:02
the real moins moins a écrit : et le mien y marche hein |
ouais, ca revient au même ...
c'était juste au cas où il est pas vu le pourquoi du darkbug
Marsh Posté le 24-09-2003 à 15:59:46
Taiche a écrit : |
haaaaan mais jcomprend pas jte dis
Marsh Posté le 24-09-2003 à 16:00:53
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?)
Marsh Posté le 24-09-2003 à 16:13:10
benou a écrit : |
oui voila , je comptait faire un mix de vos deux reponses
Marsh Posté le 24-09-2003 à 16:13:33
ReplyMarsh Posté le 24-09-2003 à 16:28:36
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? |
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"!
Marsh Posté le 24-09-2003 à 16:36:03
El_gringo a écrit : |
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
Marsh Posté le 24-09-2003 à 16:44:02
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...
Marsh Posté le 24-09-2003 à 16:47:27
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 : |
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
Marsh Posté le 24-09-2003 à 18:52:40
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 ...
Marsh Posté le 24-09-2003 à 18:59:15
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.
Marsh Posté le 24-09-2003 à 19:16:09
je crois que le veryfree y'a un ptit truc qui lui a echapé dans son idée de plugin là
Marsh Posté le 24-09-2003 à 19:20:14
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à |
+1
Marsh Posté le 24-09-2003 à 19:24:25
expliquez moi alors je vous prie , je suis la pour apprendre moi
Marsh Posté le 24-09-2003 à 19:34:17
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.
Marsh Posté le 23-09-2003 à 23:34:18
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
merci de votre aide
Message édité par veryfree le 24-09-2003 à 00:17:35