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?
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) {
}
MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();
ou
MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();
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.