【问题标题】:Why am i getting Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature at runtime? [closed]为什么我在运行时线程“main”java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature 中出现异常? [关闭]
【发布时间】:2021-06-25 17:59:27
【问题描述】:

尝试使用 jackson 2.12.2 生成一些 yaml 文件。我的 pom 文件包含以下杰克逊工件

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.12.2</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
  <version>2.12.2</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.12.2</version>
</dependency> 

我编译正常,但在运行时出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature
 at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:655)
 at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:567)

异常发生在下面一行

ObjectMapper om = new ObjectMapper(new YAMLFactory());

我不知道我缺少什么依赖项,代码编译没有错误。我们在一个孤立的网络上,无法从人口稀少的关系存储库访问互联网,因此我必须将每个依赖项添加到存储库。如果你能向我解释我如何自己解决这个问题,我会加分,因为我预计未解决的运行时依赖项会进一步困扰我。

我刚刚使用 mvn depenency:tree 进行了检查,看起来我正在使用旧版本的 jackson yaml 和 core jars。我不知道为什么会这样。


[INFO] +- io.github.openfeign:feign-httpclient:jar:10.7.4:compile
[INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.8.11:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.8.11:compile
[INFO] | \- org.yaml:snakeyaml:jar:1.17:compile
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.12.2:compile

【问题讨论】:

  • 你是如何用 maven 生成你的 jar 的?它是一个 fat-jar,即它包含所有需要的依赖项吗?
  • NoClassDefFoundError: 表示当类加载器尝试从库中加载它时找不到它.. 检查您创建的 jar 文件。
  • 不,我不是在构建一个胖罐子。我在 intellij 内部运行。
  • 您能否发布一个可重现的示例?例如,显示你的整个 pom 文件和你的整个依赖树。
  • 我发现了问题,其中一个子 pom 正在调用旧版本。

标签: java maven jackson yaml jackson-databind


【解决方案1】:

好的,所以当我添加 YAMLFactory 时,intellij 询问我是否要包含依赖项,我说是。所以它添加了 2.8.11 依赖。显然 YAMLFactory 在 2.12.2 中不存在。仅供参考,我依靠https://stackabuse.com/reading-and-writing-yaml-files-in-java-with-jackson/ 的教程获取代码示例。我将所有 jackson 工件更改为 2.8.11,代码现在按预期运行。

【讨论】:

  • 永远不要再使用 IntelliJ 功能 ^^
猜你喜欢
  • 2018-04-26
  • 2017-12-17
  • 2021-09-04
  • 2020-11-24
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多