在 Java 应用程序中,我试图通过在类上使用newInstance()方法来创建类Class1的实例。Class1 属于我的项目,但它还需要来自另一个项目的Class2,它位于我已添加到项目和 Eclipse 中的构建路径的外部 jar中。Eclipse 似乎在编译项目时找到了 Class2,没有任何问题,但是当我尝试获取 Class1 的实例时,它会抛出关于 Class2的ClassNotFoundException 。
这是 Class1 的样子:
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 的文件夹,其中包含一些 jars,我创建了另一个名为 libs_other_company 的 lib 文件夹,并将 Class2 所在的 jar 放在那里。如果我去 java构建路径我可以看到库选项卡中添加的 jar。
我直接从 Eclipse 在 Tomcat 服务器中运行应用程序(我没有使用 Ant 或 Maven 之类的东西)。
它怎么可能在编译时找到类但在运行时找不到?有什么想法让它起作用吗?
谢谢。