Java NoClassDefFoundError,即使JAR';包含在清单类路径中的
下面是我创建的jar的清单文件Java NoClassDefFoundError,即使JAR';包含在清单类路径中的,java,jar,Java,Jar,下面是我创建的jar的清单文件 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: Arun Class-Path: lib/httpclient-4.5.1.jar lib/httpcore-4.4.3.jar lib/c ommons-logging-1.2.jar lib/commons-codec-1.9.jar lib/httpmime-4.5.1.j ar lib/json-simple-1.1.1.
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Arun
Class-Path: lib/httpclient-4.5.1.jar lib/httpcore-4.4.3.jar lib/c
ommons-logging-1.2.jar lib/commons-codec-1.9.jar lib/httpmime-4.5.1.j
ar lib/json-simple-1.1.1.jar lib/junit-4.10.jar lib/hamcrest-core-1.1
.jar
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_72
Main-Class: org.wso2.ml.driver.Shell
尽管类路径条目显示它在jar的lib文件夹中添加了必要的jar,但当我运行这个可执行jar时,我得到一个Noclassdeffound错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/entity/mime/content/ContentBody
这就是我执行jar的方式
java -jar restclient-1.0-SNAPSHOT.jar
尽管类路径条目显示它在jar的lib文件夹中添加了必要的jar
Java不会在jar文件中查找jar文件。它在罐子旁边寻找它们。因此,您需要以下文件/目录结构:
restclient-1.0-SNAPSHOT.jar
lib/
httpclient-4.5.1.jar
httpcore-4.4.3.jar
...
此外,在运行时依赖项中包含junit和hamcrest似乎并不正确。这些应该由测试代码使用,而不是由生产代码使用
尽管类路径条目显示它在jar的lib文件夹中添加了必要的jar
Java不会在jar文件中查找jar文件。它在罐子旁边寻找它们。因此,您需要以下文件/目录结构:
restclient-1.0-SNAPSHOT.jar
lib/
httpclient-4.5.1.jar
httpcore-4.4.3.jar
...
此外,在运行时依赖项中包含junit和hamcrest似乎并不正确。这些应该由测试代码使用,而不是由生产代码使用。我认为错误在于您似乎正在做出的假设: 尽管类路径条目显示它在jar的lib文件夹中添加了必要的jar 我假设您已经将这些
类路径
JAR放在restclient-1.0-SNAPSHOT.JAR
中,否则您就不会有这个问题
如果您看到,它清楚地提到以下内容:
注意:类路径头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的jar文件,则不能使用MyJar.jar清单中的类路径头将MyUtils.jar中的类加载到类路径中
您应该在本地文件夹中提供这些其他JAR文件。如果你喜欢Maven,也许考虑使用.< /P> < P>我相信错误是你所做的假设: 尽管类路径条目显示它在jar的lib文件夹中添加了必要的jar 我假设您已经将这些
类路径
JAR放在restclient-1.0-SNAPSHOT.JAR
中,否则您就不会有这个问题
如果您看到,它清楚地提到以下内容:
注意:类路径头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的jar文件,则不能使用MyJar.jar清单中的类路径头将MyUtils.jar中的类加载到类路径中
您应该在本地文件夹中提供这些其他JAR文件。如果你喜欢Maven,也许考虑使用.< /p>,JVM不同意你的观点——它找不到类。你需要找出你做错了什么,不要坚持认为一切都好。JVM不同意你的观点——它找不到类。你需要找出你做错了什么,不要坚持认为一切都好。这就解决了问题。但我不知道junit和hamcrest是如何被放入lib文件夹的。我没有在我的pom.xml中直接包含这些依赖项。有什么方法可以让我知道这些jar是如何在这里结束的吗?
mvn dependency:tree
应该提供依赖项树,并允许找到它们的来源。com.googlecode.json-simple json simple就是包含这两个jar的。我必须扔掉那两个罐子吗?你可以在你的pom中添加一个排除项,是的。除非json simple在运行时真的需要它们,我觉得这很可疑。这就解决了问题。但我不知道junit和hamcrest是如何被放入lib文件夹的。我没有在我的pom.xml中直接包含这些依赖项。有什么方法可以让我知道这些jar是如何在这里结束的吗?mvn dependency:tree
应该提供依赖项树,并允许找到它们的来源。com.googlecode.json-simple json simple就是包含这两个jar的。我必须扔掉那两个罐子吗?你可以在你的pom中添加一个排除项,是的。除非json simple在运行时真的需要它们,我会觉得这很可疑。