[英]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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.