Trong ứng dụng Java, tôi đang cố tạo cá thể của lớp Class1 bằng cách sử dụng phương thức newInstance() trên lớp. Class1 thuộc về dự án của tôi, nhưng nó cũng cần Class2 từ dự án khác và nằm ở trong một bình bên ngoài mà tôi đã thêm vào dự án và đường dẫn xây dựng trong Eclipse. Eclipse dường như tìm Class2 vì nó biên dịch dự án mà không có bất kỳ vấn đề gì, nhưng khi tôi cố gắng để có được thể hiện của Class1 nó ném một ClassNotFoundException về Class2.ClassNotFoundException trong thời gian chạy nhưng ứng dụng biên dịch
Đây là cách Class1 trông giống như:
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
...
}
}
và đây là cách tôi cố gắng để có được những thể hiện của nó:
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);
}
Và khi tôi thực hiện mà tôi nhận được:
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
Một điều cần thêm về cấu hình dự án của tôi là trong thư mục WEB-INF, tôi có một thư mục có tên là libs với một số ja rs và tôi tạo ra một thư mục lib gọi là libs_other_company và tôi đã đặt ở đó cái lọ nơi Class2 đang ở. Nếu tôi đi đến đường dẫn xây dựng java, tôi có thể thấy jar được thêm vào trong thẻ thư viện.
Tôi đang chạy ứng dụng trong máy chủ Tomcat trực tiếp từ Eclipse (Tôi không sử dụng bất kỳ thứ gì như Ant hoặc Maven).
Làm cách nào để có thể tìm thấy lớp tại thời gian biên dịch nhưng không tìm thấy ở thời gian chạy? Bất kỳ ý tưởng để làm cho nó hoạt động?
Cảm ơn.
Có vẻ như nó đã được giải quyết ở đây. Chưa kiểm tra. –