5

我知道我们可以使用自定义类加载器动态加载类。但这里我的问题是我的班级本身取决于其他班级

我的任务是获取 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..

谁能告诉如何解决这个问题?

4

2 回答 2

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...
于 2012-09-24T15:05:43.747 回答
0

你是如何创建你的 ClassLoader 的?

您是否指定了另一个“父”类加载器,可以委派哪些类加载?

于 2012-09-13T06:55:25.163 回答