web-dev-qa-db-fra.com

Méthode pour charger dynamiquement Java

Quelle serait une bonne façon de charger dynamiquement Java fichiers de classe afin qu'un programme compilé dans un bocal puisse lire tous les fichiers de classe dans un répertoire et les utiliser, et comment peut-on écrire les fichiers de manière qu'ils ont le nom de package nécessaire par rapport au pot?

41
MirroredFate

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 se trouvent pas sur le chemin de 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.toURI().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) {
}
86
aioobe
MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();

ou

MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();
8
d2k2

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
Peter Lawrey