Partage
  • Partager sur Facebook
  • Partager sur Twitter

Charger Dynamiquement un Jar

    21 mai 2012 à 15:42:54

    Bonjour à tous!!
    J'aimerais savoir s'il était possible de charger Dynamiquement un JAR ?!
    Car avec l'URLClassLoader on peut seulement loader les classes du jar et non le JAR.

    Si quelqu’un a une idée :) !!
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2012 à 17:35:09

      Que veux-tu loader à part des classes dans un jar ?

      Sinon tu peu extraire ton jar dans un dossier et manipuler les fichiers extraits.

      Un code que j'avais ecrit lors d'un projet (extraction d'un jar) :

      /*__________________________________________________________________*/
      	/** Extrait les fichiers d'un jar.
      	 * @param jar Le fichier jar à extraire.
      	 * @param output Le dossier où les fichiers doivent être extraits.
      	 * @return true si OK, false sinon.
      	 * @throws IOException If an I/O error occurs
      	 * @throws InterruptedException if the current thread is interrupted by another thread while it is waiting,
      	 * then the wait is ended and an InterruptedException is thrown.
      	 */
      public static boolean extract(String jar, String output) throws IOException, InterruptedException
      {
      	StringBuilder commande = new StringBuilder();
      		
      	// Creation de la commande
      	commande.append("jar xvf ");
      	commande.append("\""+jar+"\"");
      		
      	System.out.println(commande);
      		
      	Process p = Runtime.getRuntime().exec(commande.toString(), null, new File(output));
              
              if( p.waitFor() != 0 )
      		return false;
      	return true;
      }
      


      A noter qu'il faut que ta variable PATH contienne le dossier de ton java (appel de la commande jar).
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2012 à 9:00:41

        Citation : jusabatier

        Que veux-tu loader à part des classes dans un jar ?


        Oui je sais bien qu'il faut loader que des classes mais en fait c'est pour ajouter une librairie dynamiquement selon un paramètre passer.
        Sa serait a peu prés comme sa .
        public static void main(String[] args) 
        {
          String Base = args[0];
          String User = args[1];
          String Pass = args[2];
         
          if(Base == "mysql")
            LoadLib("mysql.jar");
          if(Base == "Db2")
             LoadLib("Db2.jar");
          if(Base == "postGre")
            LoadLib("postgresql.jar");
        }
        
        public static void LoadLib(String lib)
        {
           URL urlList[] = {new URL(lib)};
           URLClassLoader loader = new URLClassLoader(urlList);
           //Et la je voudrai loader la lib de mysql par exemple
           loader.loadClass(???);
        
        }
        



        Appart loader toute les classes je voit pas comment faire ?!
        Car s'il y a 500 classes a loader cela peut être long ...


        Merci !


        EDIT :

        C'est bon j'ai trouver ..
        voici le code :
        //Recupere le ClassPath et cast en UrlClassLoader
                 URLClassLoader sysLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
                 try
                 {
                     URL url = new File("C:\lib\monJar.jar").toURI().toURL();
                     Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", new Class<?>[]{URL.class});
                     //Permet de mettre la methode addURL accessible car elle est protected
                     addURL.setAccessible(true);
                     addURL.invoke(sysLoader, new Object[]{url});
                 }
                 catch(Exception e)
                 {
                     e.printStackTrace();
                 }
        


        voila ;)
        • Partager sur Facebook
        • Partager sur Twitter

        Charger Dynamiquement un Jar

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown