【问题标题】:Class not found even when in Jar in the classpath即使在类路径中的 Jar 中也找不到类
【发布时间】:2016-03-16 18:31:06
【问题描述】:

我正在尝试部署一个使用 Jackson、JUnit 和 Commons-IO 的应用程序。我的应用程序的类路径中有以下罐子:

commons-io-2.4.jar
jackson-databind-2.7.0.jar
jackson-annotations-2.7.0.jar
log4j-api-2.4.1.jar
wsdiscovery-0.2.jar
jackson-core-2.7.0.jar
log4j-core-2.4.1.jar

此应用程序在我的开发环境中运行,并且我已将上述所有 Jar 与主应用程序 jar 一起部署。我可以毫无问题地运行该应用程序,但每次尝试使用它时都会出现以下故障:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
    at com.oncam.hware.app.OnvifApp.formatOutput(OnvifApp.java:356)
    at com.oncam.hware.app.OnvifApp.dispatchCommand(OnvifApp.java:271)
    at com.oncam.hware.app.OnvifApp.loopSocket(OnvifApp.java:130)
    at com.oncam.hware.app.OnvifApp.useSocket(OnvifApp.java:216)
    at com.oncam.hware.app.OnvifApp.main(OnvifApp.java:473)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 5 more

ObjectMapper 类位于 jackson-databind-2.7.0.jar 文件中。此外,我在访问其他 jar 文件(包括 JUnit jars!)中的类时也没有问题。出于某种原因,就好像类加载器正在加载除 jackson-databind-2.7.0.jar 之外的每个 Jar。

有谁知道是什么原因造成的,我该如何解决?

请高人指教……

【问题讨论】:

  • 你的类路径中一定有错字。你如何运行你的程序?
  • 使用 java -verbose 查看所有类的加载位置。这些错误有时还会掩盖初始化程序中的错误或其他无法找到的依赖项,如超类。

标签: java jar runtime


【解决方案1】:

我知道出了什么问题。

事实证明,当您将代码导出到 JAR 文件时,我使用的环境(Eclipse!)没有正确更新清单文件。如果没有正确的清单条目,应用程序将无法“找到”相关的 jar 文件。

在我看来,这是 Eclipse 人员的严重疏忽——尤其是当您的应用程序依赖于大量 jar 文件时。为了让我的应用程序运行,我有以下选择:

  1. 创建一个脚本来运行 jvm 并具有指向每个所需 jar 文件的参数列表,或者:

2:手动将每个需要的jar文件输入到Manifest文件中

据我所知,没有办法自动更新清单文件。这是一个严重的 PITA(A** 疼痛)......

无论如何,很抱歉给大家带来了这个问题。希望发布此答案可以帮助其他人避免类似的问题...

【讨论】:

  • Maven 不是重点。我拥有应用程序在开发环境中运行所依赖的所有 jar。除非 Maven 为您更新清单文件,否则在您在环境之外部署时它是无关紧要的。 (请注意:你认为我首先是如何获得所有依赖 jar 的???)...
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2016-08-10
  • 2018-07-15
  • 2019-12-17
相关资源
最近更新 更多