在Java應用程序中,我嘗試使用的newInstance()在類方法來創建類的Class1 的的實例。 1類是屬於我的項目,但它也需要Class2中這是從另一個項目和位於中,我已經添加到項目,並在Eclipse中構建路徑的外部JAR。 Eclipse似乎發現了Class2,因爲它編譯項目時沒有任何問題,但是當我嘗試獲取Class1的實例時,它會拋出關於Class2的ClassNotFoundException。的ClassNotFoundException在運行,但應用程序編譯
這是1類的樣子:
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
...
}
}
,這是我如何努力得到它的實例:
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);
}
當我執行,我得到:
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
關於我的項目配置的另一件事是,在WEB-INF文件夾下我有一個名爲libs的文件夾,其中包含一些ja rs和我創建了另一個名爲libs_other_company的lib文件夾,並且我在那裏放置了Class2所在的jar。如果我轉到java構建路徑,可以看到添加到庫選項卡中的jar。
我在Tomcat服務器直接從Eclipse中運行的應用程序(我不喜歡使用Ant或Maven的任何東西)。
它怎麼可能在編譯時找到這個類,而不是在運行時呢?任何想法,使其工作?
謝謝。
它看起來應該已經在這裏解決了。雖然沒有檢查過。 –