![](/img/trans.png)
[英]Throwing java.lang.ClassNotFoundException even if the class exists in jar file
[英]java.lang.ClassNotFoundException when loading a class from a jar file
我试图使用classLoader从jar文件中加载类。 这是我的代码:
private void loadJar(String path, String className) {
try {
File file = new File(path);
if (!(file.exists())) {
log.error("JAR File not found!");
return;
}
String anUrl = "jar:file://" + file.getAbsolutePath() + "!/";
URL[] urls = { new URL(anUrl)};
URLClassLoader classLoader = new URLClassLoader(urls);
System.out.println("className: "+className);
Class aClass = classLoader.loadClass(className);
if (!(isNullaryConstructor(aClass))) {
System.out.println("Non nullary Constructor detected!");
return;
}
Object anInstantiation = aClass.newInstance();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
我在具有主类的测试工作区中进行了尝试。 而且有效。
但是,当我将其集成到我的项目中时。 我得到了这个错误:
java.lang.ClassNotFoundException
我正在使用Maven。 我是否必须在依赖项中添加一些内容?
我列出了jar文件中存在的类,以使用以下代码验证className是否正确:
public static void main(String[] args) throws Exception {
JarFile jf = new JarFile(new File(jarPath));
Enumeration<JarEntry> e = jf.entries();
while (e.hasMoreElements()) {
JarEntry entry = e.nextElement();
System.out.println(entry.toString());
}
jf.close();
}
我输入的名字是正确的。
任何帮助,请!
谢谢 :)
URL可能是错误的。 请尝试使用file.toURI().toURL()
。 或删除!/
; 标准Java类加载器不支持此语法。
类的名称可能是错误的。 确保使用完全限定名称(即包名称),并用分隔元素.
并且没有.class
扩展名。 对于String
,您将使用java.lang.String
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.