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.
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).
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
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.