Hallo,
ich möchte zur Laufzeit eine Klasse aus einer .class-Datei laden, die in einem mir unbekannten package steckt:
Als input habe ich ein File-Objekt der AClass.class Datei, daraus extrahiere ich Pfad und Dateinamen.
Solange die Klasse im default-package kompiliert wurde, funktioniert das auch gut. Wenn die Klasse allerdings im Package "myPackage" kompiliert wurde, müsste die Klasse ja eigentlich auch in einem myPackage-Unterverzeichnis stehen und ich müsste die Klasse per "myPackage.AClass" laden.
Das Problem ist nun, dass ich das package nicht kenne, ich bekomme die AClass.class Datei quasi per EMail und muss sie von c:\AClass.class laden, egal in welchem package sie der Absender kompiliert hat.
So gehts:
aber eben nur, wenn AClass ohne package ist.
Wenn die AClass in einem package steckt, dann bekomme ich das:
SCHWERWIEGEND: null
java.lang.NoClassDefFoundError: AClass (wrong name: myPackage/AClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
Weiß jemand dafür eine vernünftige Lösung?
mohrenkopf
ich möchte zur Laufzeit eine Klasse aus einer .class-Datei laden, die in einem mir unbekannten package steckt:
Als input habe ich ein File-Objekt der AClass.class Datei, daraus extrahiere ich Pfad und Dateinamen.
Solange die Klasse im default-package kompiliert wurde, funktioniert das auch gut. Wenn die Klasse allerdings im Package "myPackage" kompiliert wurde, müsste die Klasse ja eigentlich auch in einem myPackage-Unterverzeichnis stehen und ich müsste die Klasse per "myPackage.AClass" laden.
Das Problem ist nun, dass ich das package nicht kenne, ich bekomme die AClass.class Datei quasi per EMail und muss sie von c:\AClass.class laden, egal in welchem package sie der Absender kompiliert hat.
So gehts:
Java:
public static Class<?> getClassForFile(File f) throws MalformedURLException, ClassNotFoundException
{
String name = f.getName().replace(".class", "");
URL urlPath = f.getParentFile().toURI().toURL();
URLClassLoader cl = new URLClassLoader(new URL[]{urlPath});
Class c = cl.loadClass(name);
return c;
}
aber eben nur, wenn AClass ohne package ist.
Wenn die AClass in einem package steckt, dann bekomme ich das:
SCHWERWIEGEND: null
java.lang.NoClassDefFoundError: AClass (wrong name: myPackage/AClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
Weiß jemand dafür eine vernünftige Lösung?
mohrenkopf