Méthode pour charger dynamiquement les fichiers de classe java

Quel serait un bon moyen de charger dynamiquement les fichiers de classe java afin qu'un programme compilé dans un jar puisse lire tous les fichiers de classe dans un répertoire et les utiliser, et comment écrire les fichiers pour qu'ils aient le nom de paquet nécessaire par rapport au jar?

37
demandé sur MirroredFate 2011-06-03 00:13:15

3 réponses

Je crois que c'est un ClassLoader que vous recherchez.

Je vous suggère de commencer par regarder l'exemple ci-dessous qui charge les fichiers de classe qui ne sont pas sur le chemin de la classe.

// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");

try {
    // Convert File to a URL
    URL url = file.toURL();          // file:/c:/myclasses/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class; MyClass.class should be located in
    // the directory file:/c:/myclasses/com/mycompany
    Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
77
répondu aioobe 2016-08-25 07:00:18
MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();

Ou

MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();
8
répondu d2k2 2012-07-18 12:20:58

Si vous ajoutez un répertoire à votre chemin de classe, vous pouvez ajouter des classes après le démarrage de l'application et ces classes peuvent être chargées dès qu'elles ont été écrites dans le répertoire.

1
répondu Peter Lawrey 2011-06-02 20:24:05