[Introspection] accès aux classes encapsulées dans un JAR
Bonjour,
J'utilise l'introspection pour instancier des objets dont je connais le nom qu'au runtime.
Lorsque j'exécute mon programme normalement cela fonctionne correctement. J'ai créé un Jar de mon appli, et à l'exécution je n'arrive pas retrouver mes classes.
Voilà le bout de code qui plante, méthode qui liste toutes les classes du package passé en paramètre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
public static Class[] getClasses(String pckgname)
throws ClassNotFoundException
{
ArrayList<Class> classes = new ArrayList<Class>();
// Get a File object for the package
File directory = null;
try {
ClassLoader cld = Thread.currentThread().getContextClassLoader();
if (cld == null) {
throw new ClassNotFoundException("Impossible de récupérer le class loader.");
}
String path = '/' + pckgname.replace('.', '/');// '/' + racine +
URL resource = cld.getResource(path);
if (resource == null)
{
throw new ClassNotFoundException("Aucune ressource pour " + path);
}
directory = new File(resource.getFile());
} catch (NullPointerException x) {
throw new ClassNotFoundException(pckgname + " (" + directory + ") n'est pas un package valide");
}
System.err.println("Introspection.getClasses nom rep " + directory.getAbsolutePath());
if (directory.exists())
{
// Get the list of the files contained in the package
String[] files = directory.list();
for (int i = 0; i < files.length; i++) {
// we are only interested in .class files
if (files[i].endsWith(".class")) {
// removes the .class extension
classes.add(Class.forName(pckgname + '.'
+ files[i].substring(0, files[i].length() - 6)));
}
}
} else {
throw new ClassNotFoundException(pckgname + " n'apparait pas comme un package valide.");
}
Class[] classesA = new Class[classes.size()];
classes.toArray(classesA);
return classesA;
} |
J'ai l'erreur
Citation:
fr.nompackage n'apparait pas comme un package valide.