リフレクションを使用して JAR ファイルからクラスをロードしようとしています。この JAR ファイルには、別の JAR ファイルにあるインターフェースを実装するクラスがあります。インターフェイスを含む JAR ファイルは、プロジェクトのビルド パスにあるため、プロジェクトによって認識されます。この JAR ファイルは、JBoss 6 の 2 つのフォルダー (「client」と「common/lib」) にもあります。
クラス java.net.URLClassLoader の loadClass メソッドを使用して、クラスを動的にロードしてオブジェクトを作成しようとすると、問題が発生します。プロジェクトと JAR ファイルの両方で共有されるインターフェースに関して ClassNotFoundException がスローされます。次の方法で ClassLoader を取得しています。
public static ClassLoader getClassLoader(final String fileName) {
final File file = new File(fileName);
URL url;
ClassLoader classLoader = null;
try {
url = file.toURL();
final URL[] urls = new URL[]{url};
classLoader = new URLClassLoader(urls);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return classLoader;
}
この ClassLoader を使用してクラスをロードする必要があります。これは、クラスが JBoss にはない JAR への参照を含む File 変数であるためです。
JBoss の別のフォルダーに JAR をインターフェースとともに含める必要がありますか?