In einer Java-Anwendung Ich versuche, die Instanz der Klasse Class1 unter Verwendung newInstance() Methode für die Klasse zu erstellen. Class1 gehört zu meinem Projekt, aber es braucht auch Class2, die von einem anderen Projekt ist und die in einem externen Krug befindet, die ich dem Projekt und dem Build-Pfad in Eclipse hinzugefügt habe. Eclipse scheint Class2 zu finden, da es das Projekt ohne Probleme kompiliert, aber wenn ich versuche, die Instanz von Class1 zu bekommen, wirft es eine ClassNotFoundException über Class2. DieseClassNotFoundException in Laufzeit, aber die Anwendung kompiliert
ist, wie Class1 wie folgt aussieht:
import other.package.Class2;
public class Class1 implements Class1Interface{
//there's no explicit constructor
@Override
public void method1(String param){
System.out.println("Loading.....");
}
@Override
public void notifyChanges(String param) throws Exception{
Class2 class2 = Class2.getInstance(); //here it's used the Class2 from another jar
...
}
}
und das ist, wie ich versuche, die Instanz davon zu bekommen:
String myParam = "blabla";
Class1Interface interf = "my.package.Class1";
try {
interf = (Class1Interface) Class.forName(interfazws).newInstance();
interf.method1(myParam);
} catch (InstantiationException e) {
handle(e);
} catch (IllegalAccessException e) {
handle(e);
} catch (ClassNotFoundException e) {
handle(e);
}
Und wenn ich ausführen, dass ich bekommen:
Caused by: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class my.package.myJobJob] failed; nested exception is java.lang.NoClassDefFoundError: other/package/Class2
...
Caused by: java.lang.NoClassDefFoundError: other/package/Class2
...
Caused by: java.lang.ClassNotFoundException: other.package.Class2
Eine andere Sache, die über meine Projektkonfiguration hinzuzufügen ist, dass ich unter WEB-INF-Ordner einen Ordner namens libs mit einigen ja habe rs und ich haben einen weiteren lib-Ordner namens libs_other_company erstellt und dort das jar platziert, in dem Class2 ist. Wenn ich zum java-Build-Pfad gehe, kann ich das jar auf der Registerkarte libraries sehen.
Ich benutze die Anwendung in einem Tomcat-Server direkt von Eclipse (ich verwende nichts wie Ant oder Maven).
Wie kann es sein, dass die Klasse zur Kompilierzeit gefunden wird, aber nicht zur Laufzeit? Irgendeine Idee, damit es funktioniert?
Danke.
Es sieht so aus, als hätte es hier schon gelöst werden sollen. Habe das aber nicht überprüft. –