(JAR文件):java.lang.NoClassDefFoundError

时间:2019-12-16 18:22:42

标签: java jar

我对Java和JAR文件的经验很少。我已经下载了提供给我的JAR文件,其中似乎包含所有必需的依赖项,但是当我尝试运行java -jar MyJar.jar时,它会引发以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:420)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.HttpClient
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 3 more

JAR文件本身似乎包含MANIFEST.MF文件中概述的所有必要依赖项:

JAR contents

Manifest-Version: 1.0
Rsrc-Class-Path: ./ amqp-client-5.6.0.jar jackson-core-2.9.8.jar jacks
 on-databind-2.9.8.jar jackson-annotations-2.9.0.jar jackson-dataforma
 t-yaml-2.9.8.jar snakeyaml-1.23.jar slf4j-api-1.7.5.jar slf4j-log4j12
 -1.7.5.jar log4j-1.2.17.jar httpclient-4.5.8.jar httpcore-4.4.11.jar 
 commons-logging-1.2.jar commons-codec-1.11.jar
Class-Path: .
Rsrc-Main-Class: TRECISExternalClient
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

我想知道我是否缺少某些东西,或者是否有某些畸形的东西。愿意在需要时提供更多信息。

2 个答案:

答案 0 :(得分:0)

您可以在下面的链接中检查类org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader的完整实现

https://github.com/U-Alberta/exemplar/blob/master/src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java

请参考第47行if (rsrcPath.endsWith("/")),我认为您必须用./分隔每个罐子。此外,我看到/中的斜杠Rsrc-Class-Path: ./ amqp-client-5.6.0.jar后在此行中有一个空格。它应该是Rsrc-Class-Path: ./amqp-client-5.6.0.jar。根据图像,HttpClient已经可用。

答案 1 :(得分:0)

事实证明,问题并不出在JAR文件本身上,而是我的系统上有多个版本的OpenJDK。清除其他版本并重新安装OpenJDK v1.8.0(在Ubuntu仓库上为openjdk-8-jdk)可以解决此问题。

相关问题