簡體   English   中英

URLClassLOader無法從jar動態加載類

[英]URLClassLOader unable to load classes from jar dynamically

   URLClassLoader child;
   try {
       child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
       child.loadClass("com.bla.bla.StringUtilService");
   } catch (MalformedURLException | ClassNotFoundException ex) {
       ex.printStackTrace();
   }

我在loadClass得到ClassNotFoundException

我嘗試了幾種代碼變體,例如

URL[] urls = { new URL("jar:file:" + "E:\\Works\\Workspace\\JUnit_Proj\\client.jar"+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);

但是所有結果都變成ClassNotFoundException

我已經嘗試在Eclipse中調試,但是類加載器實例無法從jar中加載類。 Vector類為空。

使用URLClassLoader的其他構造函數成功。



    try {
        File jarFile = new File("D:\\Workspace\\Test\\Test.jar");
        URLClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()});

        Class.forName("com.bla.bla.HelloWorld", true, loader);
        System.out.println("Success");
        loader.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

該類是url中dir的直接子類,因此不需要包。

嘗試不帶包裝的包裝。 像這樣:

URLClassLoader child;
try {
    child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
    child.loadClass("StringUtilService");
} catch (MalformedURLException | ClassNotFoundException ex) {
    ex.printStackTrace();
}

另外,嘗試這樣:

URLClassLoader child;
try {
    child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, getClass().class.getClassLoader());
    child.loadClass("StringUtilService");
} catch (MalformedURLException | ClassNotFoundException ex) {
    ex.printStackTrace();
}

解決方案來自: ClassNotFoundException,同時使用URLClassLoader從文件加載類

暫無
暫無

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

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