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();
}
我在ClassNotFoundException
收到loadClass
。
我尝试了几种代码变体,例如
URL[] urls = { new URL("jar:file:" + "E:\\Works\\Workspace\\JUnit_Proj\\client.jar"+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);
但所有结果都是ClassNotFoundException
!
我在Eclipse中尝试过调试,但是类加载器实例无法从jar加载类。 Vector类是空的。
答案 0 :(得分:1)
成功使用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();
}
答案 1 :(得分:0)
该类是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 while loading a class from file with URLClassLoader