簡體   English   中英

從jar動態加載類

[英]Loading classes dynamically from jar

我知道我們可以使用自定義類加載器動態加載類。 但在這里我的問題是我的課程本身取決於其他課程

我的任務是獲取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..

有誰能說出如何解決這個問題?

似乎有一種誤解。 如果你有一個文件夾中所需的所有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...

你是如何創建ClassLoader的?

您是否指定了另一個“父”類加載器,可以委托加載類加載嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM