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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Comment charger des jars dynamiquement?

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

Reprise du message précédent :
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 24-09-2003 à 19:34:17  profilanswer
 

n°522496
veryfree
Posté le 24-09-2003 à 19:38:42  profilanswer
 

the real moins moins a écrit :

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.


 
oui ca je compte le faire bien sur!
 
mais imaginons que ton plug in utilise une lib externe que tu ne peux pas mettre dans le jar de ton plug in pour des problemes de licences, comment cette lib externe va t elle pouvoir etre appelée  si elle n'est pas dans le classpath ?
tu me suis?


Message édité par veryfree le 24-09-2003 à 19:41:36
n°522498
the real m​oins moins
Posté le 24-09-2003 à 19:41:22  profilanswer
 

veryfree a écrit :


 
oui ca je compte le faire bien sur!
 
mais imaginons que ton plug in utilise une lib externe que tu ne peux pas mettre dans le jar de ton plug in pour des raison de licence, comment cette lib externe va t elle pouvoir etre appelée  si ellen'est pas dans le classpath ?
tu me suis?


 
Quand ton instancie ton URLClassLoader, tu lui passes une URL[] . Il faut que le jar de la lib externe en question soit dans cet array, et je pense que ça marchera.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°522500
veryfree
Posté le 24-09-2003 à 19:43:17  profilanswer
 

the real moins moins a écrit :


 
Quand ton instancie ton URLClassLoader, tu lui passes une URL[] . Il faut que le jar de la lib externe en question soit dans cet array, et je pense que ça marchera.


 
c'est ce qu'on a essayé hier mais ca marche pas :o

n°522503
benou
Posté le 24-09-2003 à 19:49:55  profilanswer
 

veryfree a écrit :

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


Tu peux faire un truc qui ressemble a ca :  

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. import java.util.*;
  4. /** ca c'est juste l'objet chargé de faire l'interface entre le plug-in et le reste de ton programme */
  5. interface ProgContext {}
  6. /** On va dire que chaque plugin est un jar qui contient une classe nommée implémentant cette interface */
  7. interface Loader {
  8. public void start(ProgContext prog);
  9. public void stop();
  10. }
  11. /**
  12. * un plug-in est un jar. dans ce jar, il devra y avoir à la racine un fichier plugin.properties avec la  
  13. * propriété loader.class (indiquant le nom de la classe à charger pour lancer le plug-in). Elle dervra imlémenter loader  
  14. */
  15. public class PluginLoader {
  16. private File directory;
  17. private ProgContext link;
  18. private Collection plugins;
  19. /** @param directory repertoire où y a les jar des plug-ins */
  20. public PluginLoader(File directory, ProgContext link) {
  21.  this.directory = directory;
  22.  this.link = link;
  23.  this.plugins = new ArrayList();
  24.  reload();
  25. }
  26. public void reload() {
  27.  unload();
  28.  File[] jars = directory.listFiles(new FileFilter() {
  29.   public boolean accept(File file) {
  30.    return ((file.isFile()) && (file.getName().endsWith(".jar" )));
  31.   }
  32.  });
  33.  // il faut utiliser un classloader par plug-in pour éviter qu'ils aient accès au code des autres plug-in
  34.  // ce qui pourrait être considéré comme une faille de sécurité  
  35.  for (int i = 0; i < jars.length; i++) {
  36.   try {
  37.    jars[i].toURL();
  38.   } catch (MalformedURLException e) {
  39.    // je vois vraiment pas comment c'est possible avec un path correct :/
  40.    e.printStackTrace();
  41.    continue;
  42.   }
  43.   URLClassLoader pluginClassLoader = new URLClassLoader(new URL[] {});
  44.   String pluginName = jars[i].getName();
  45.   InputStream stream = pluginClassLoader.getResourceAsStream("/plugin.properties" );
  46.   if (stream == null) {
  47.    System.err.println("fichier /plugin.properties manquant dans le plugin " + pluginName);
  48.    continue;
  49.   }
  50.   Properties props = new Properties();
  51.   try {
  52.    props.load(stream);
  53.   } catch (IOException e) {
  54.    System.err.println("impossible de lire le fichier /plugin.properties du plug-in " + pluginName);
  55.    e.printStackTrace(System.err);
  56.    continue;
  57.   }
  58.   String loaderClassName = props.getProperty("loader.class" );
  59.   if (stream == null) {
  60.    System.err.println("propriété 'loader.class' manquante dans le fichier /plugin.properties du plugin " + pluginName);
  61.    continue;
  62.   }
  63.   Loader loader;
  64.   Class pluginLoaderClass;
  65.   try {
  66.    pluginLoaderClass = pluginClassLoader.loadClass(loaderClassName);
  67.   } catch (ClassNotFoundException e) {
  68.    System.err.println("impossible de charger le loader du plug-in " + pluginName);
  69.    e.printStackTrace(System.err);
  70.    continue;
  71.   }
  72.   try {
  73.    loader = (Loader) pluginLoaderClass.newInstance();
  74.   } catch (Exception e) {
  75.    System.err.println("Erreur lors de la création du loader du plug-in " + pluginName);
  76.    e.printStackTrace(System.err);
  77.    continue;
  78.   }
  79.   try {
  80.    loader.start(this.link);
  81.   } catch (Throwable e) {
  82.    System.err.println("Erreur lors du démarage du plug-in " + pluginName);
  83.    e.printStackTrace(System.err);
  84.   }
  85.   this.plugins.add(loader);
  86.  }
  87. }
  88. public void unload() {
  89.  for (Iterator iter = this.plugins.iterator(); iter.hasNext();) {
  90.   Loader plugin = (Loader) iter.next();
  91.   try {
  92.    plugin.stop();
  93.   } catch (Throwable e) {
  94.    System.err.println("Erreur lors de l'arret d'un plug-in" );
  95.    e.printStackTrace(System.err);
  96.   }
  97.  }
  98.  this.plugins.clear();
  99. }
  100. }


 


---------------
ma vie, mon oeuvre - HomePlayer
n°522505
benou
Posté le 24-09-2003 à 19:51:19  profilanswer
 

veryfree a écrit :


c'est ce qu'on a essayé hier mais ca marche pas :o


si, ca ca devrait marcher !


---------------
ma vie, mon oeuvre - HomePlayer
n°522525
veryfree
Posté le 24-09-2003 à 19:59:14  profilanswer
 

benou a écrit :


Tu peux faire un truc qui ressemble a ca :  


 
[:prosterne]benou[:prosterne2]
 
merci infiniment, jregarde ca de plus pres

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)