gpt4 book ai didi

从 jar 文件加载类时出现 java.lang.ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-01 05:08:30 26 4
gpt4 key购买 nike

我试图使用 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 文件中存在的类,以验证此代码的类名是否正确:

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();
}

我输入的名字是正确的。

请大家帮忙!

谢谢:)

最佳答案

  1. URL 可能有误。请尝试使用 file.toURI().toURL() 代替。或者删除 !/;标准 Java 类加载器不支持此语法。

  2. 类的名称可能是错误的。确保使用完全限定名称(即包含包名称),元素以 . 分隔,并且没有 .class 扩展名。对于String,您可以使用java.lang.String

关于从 jar 文件加载类时出现 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com