【发布时间】: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