为什么从CMD运行JAR文件时收到NoClassDefFoundError?

时间:2016-12-16 12:04:41

标签: java jar cmd

我将jar文件放在C:\ temp

内部jar清单文件包含和所有相关的jar文件都在lib文件夹下

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.1
Created-By: 1.8.0_111-b14 (Oracle Corporation)
Class-Path: lib/httpclient-4.2.1.jar lib/httpcore-4.2.1.jar lib/common s-logging-1.1.1.jar lib/httpclient-cache-4.2.5.jar lib/httpmime-4.2.5.jar lib/log4j-1.2.13.jar lib/log4j-api-2.0-beta9.jar lib/log4j-core-2.0-beta9.jar lib/gson-2.2.4-javadoc.jar lib/gson-2.2.4-sources.jar lib/gson-2.2.4.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: abc.service.Main

当我执行

java -jar C:\temp\test.jar

我收到以下错误:

  

发生JNI错误,请检查您的安装并重试   线程" main"中的例外情况java.lang.NoClassDefFoundError:org / apache / http / client / HttpClient

1 个答案:

答案 0 :(得分:1)

您假设Class-Path引用jar文件中的jar文件。它不起作用。来自"Adding classes to the JAR file's classpath"

  

注意:Class-Path标头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的JAR文件,则不能使用MyJar.jar清单中的Class-Path标头将MyUtils.jar中的类加载到类路径中。

因此,将jar文件解压缩到主jar文件旁边。