Vous pouvez uniquement ajouter des dossiers ou des fichiers JAR à un chargeur de classe. Donc, si vous avez un seul fichier de classe, vous devez d'abord le placer dans la structure de dossier appropriée.
Here est un hack plutôt laid qui ajoute à la SystemClassLoader lors de l'exécution:
import java.io.IOException;
import java.io.File;
import java.net.URLClassLoader;
import java.net.URL;
import java.lang.reflect.Method;
public class ClassPathHacker {
private static final Class[] parameters = new Class[]{URL.class};
public static void addFile(String s) throws IOException {
File f = new File(s);
addFile(f);
}//end method
public static void addFile(File f) throws IOException {
addURL(f.toURL());
}//end method
public static void addURL(URL u) throws IOException {
URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class sysclass = URLClassLoader.class;
try {
Method method = sysclass.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(sysloader, new Object[]{u});
} catch (Throwable t) {
t.printStackTrace();
throw new IOException("Error, could not add URL to system classloader");
}//end try catch
}//end method
}//end class
La réflexion est nécessaire pour accéder à la méthode protégée addURL
. Cela pourrait échouer s'il y a un SecurityManager.
Est-il e un moyen de supprimer un fichier jar? Ou le remplacer par une version plus récente? – dmarrazzo