2014-11-01 38 views
1
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中收到ClassNotFoundExceptionURLClassloader無法從動態加載罐子類

我已經嘗試了代碼的幾個變種,如

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

但所有的結果爲ClassNotFoundException

我曾嘗試在Eclipse中進行調試,但類加載器實例無法從jar中加載類。類Vector是空的。

+0

'myJar'是什麼類型? – Henry 2014-11-01 07:42:49

+0

@Henry:java.io.File。也試過JarFile。 – javaCurious 2014-11-01 10:17:33

回答

1

成功使用的URLClassLoader的不同costructor。

0

該類是url中目錄的直接子項,因此不需要包裝。

試試這個沒有包。就像這樣:

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 while loading a class from file with URLClassLoader

+0

不幸運!我嘗試了所有的排列 – javaCurious 2014-11-01 10:10:24

+0

任何人都已成功地從jar中動態加載類? – javaCurious 2014-11-02 11:56:50

+0

閱讀此:http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html – viniciussss 2014-11-02 22:38:42