Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoClassDefFoundError,即使JAR';包含在清单类路径中的_Java_Jar - Fatal编程技术网

Java NoClassDefFoundError,即使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.

下面是我创建的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.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在运行时真的需要它们,我会觉得这很可疑。