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

誤解があるようです。「lib」などのフォルダーに必要なすべての jar がある場合、たとえば、次のようにクラスローダーを設定できます。

    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 に答える