我正在尝试使用反射从 JAR 文件中加载一个类。这个 JAR 文件有一个实现不同 JAR 文件中的接口的类。项目知道包含接口的 JAR 文件,因为它位于其构建路径中。这个 JAR 文件也在 JBoss 6 的两个文件夹中,分别是“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 加载该类,因为该类是 File 变量,它包含对 JAR 的引用,而该 JAR 不在 JBoss 中。
我是否必须将带有接口的 JAR 包含在 JBoss 的不同文件夹中?