我知道我们可以使用自定义类加载器动态加载类。 但是我的问题是我的课程本身取决于其他课程
我的任务是获取PigServer对象。所以我使用以下代码加载PigServer类
_pigServerClass = _classLoader.loadClass("org.apache.pig.PigServer");
但是这里PigServer类本身依赖于很多其他类。
因此,当我尝试获取PigServer类的实例时,它显示以下错误
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
java.lang.ClassNotFoundException:org.apache.log4j.AppenderSkeleton
etc..
有谁能说出如何解决这个问题?
答案 0 :(得分:1)
似乎存在误解。如果你有一个文件夹中所需的所有jar,比如说“lib”,你可以设置一个像这样的类加载器:
File libs = new File("lib");
File[] jars = libs.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().endsWith(".jar");
}
});
URL[] urls = new URL[jars.length];
for (int i=0; i<jars.length; i++) {
urls[i] = jars[i].toURI().toURL();
}
ClassLoader uc = new URLClassLoader(urls,this.getClass().getClassLoader());
Class<?> pigServerClz = Class.forName("org.apache.pig.PigServer", false, uc);
Object pigServer = pigServerClz.newInstance();
// etc...
答案 1 :(得分:0)
您是如何创建ClassLoader的?
您是否指定了另一个“父”类加载器,可以委派类加载吗?