Java アプリケーションでは、クラスでnewInstance()メソッドを使用してクラスClass1のインスタンスを作成しようとしています。Class1 は私のプロジェクトに属していますが、別のプロジェクトからのもので、プロジェクトと Eclipse のビルド パスに追加した外部 jarにあるClass2も必要です。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
私のプロジェクト構成について追加するもう1つのことは、WEB-INFフォルダーの下に、いくつかのjarファイルを含むlibsというフォルダーがあり、libs_other_companyという名前の別のlibフォルダーを作成し、そこにClass2が含まれるjarを配置したことです。ビルド パス ライブラリ タブに追加された jar を確認できます。
Eclipse から直接 Tomcat サーバーでアプリケーションを実行しています (Ant や Maven などは使用していません)。
実行時ではなくコンパイル時にクラスを見つけることができるのはどうしてですか? それを機能させるためのアイデアはありますか?
ありがとう。