【问题标题】:NoClassDefFoundError even though the JAR's are included in Manifest Class-PathNoClassDefFoundError 即使 JAR 包含在清单类路径中
【发布时间】:2016-02-28 23:41:58
【问题描述】:

以下是我创建的 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

虽然 Class-Path 条目显示它已在 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

【问题讨论】:

  • JVM 不同意你的观点——它找不到类。您需要弄清楚自己做错了什么,而不是坚持一切都很好。

标签: java jar


【解决方案1】:

虽然Class-Path条目显示它已经在jar的lib文件夹中添加了必要的jar

Java 不会在您的 jar 文件内部查找 jar 文件。它会在罐子旁边寻找它们。所以你需要这个文件/目录结构:

restclient-1.0-SNAPSHOT.jar
lib/
  httpclient-4.5.1.jar 
  httpcore-4.4.3.jar
  ...

此外,在您的运行时依赖项中包含 junit 和 hamcrest 似乎并不正确。这些应该由测试代码使用,而不是生产代码。

【讨论】:

  • 很好解决了这个问题。但我不知道 junit 和 hamcrest 是如何出现在 lib 文件夹中的。我没有直接在我的 pom.xml 中包含这些依赖项
  • 有什么办法可以让我知道这些罐子是怎么落在这里的?
  • mvn dependency:tree 应该为您提供依赖关系树,并允许查找它们的来源。
  • com.googlecode.json-simplejson-simple 包含这两个罐子。我必须摆脱那两个罐子吗?
  • 您可以在 pom 中添加排除项,是的。除非 json-simple 在运行时真的需要它们,否则我会觉得这很可疑。
【解决方案2】:

我认为错误是您似乎做出的假设:

虽然Class-Path条目显示它已经在jar的lib文件夹中添加了必要的jar

我假设您已将这些 Class-Path JAR 放在 restclient-1.0-SNAPSHOT.jar 本身中,否则您不会遇到此问题。

如果你看到JAR file tutorial,它清楚地提到了以下内容:

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

您应该使其他 JAR 文件在本地文件夹中可用。如果你喜欢 Maven,或许可以考虑使用maven shade plugin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2018-01-20
    • 2015-05-30
    • 2015-12-23
    相关资源
    最近更新 更多