当前位置: 首页 > 知识库问答 >
问题:

无法运行代码由于java.lang.NoClassDefFoundError: com/Fast erxml/jackson/注释/JsonMerge

马泰
2023-03-14

我在Intellij Idea 2018社区版中有一些测试代码,其中包含多个pom文件。当我运行任何testng注释测试时,我会收到一个错误,上面写着“未找到测试”。看起来问题是由于异常堆栈跟踪的这一部分:

Java语言lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge

我在谷歌上搜索了一个解决方案,发现了这个-https://github.com/FasterXML/jackson-annotations/issues/119还有这个https://stackoverflow.com/a/46406070.看起来这个问题是由于我们在项目中没有这些JAR的相同版本造成的。

1) jackson core(2.8.8)

2) jackson数据绑定(2.9.2)

3)杰克逊注释(2.8.5)

正如你所看到的,我并没有为所有的罐子提供相同的版本。我查看了项目中的所有POM,没有找到添加所有这些依赖项的地方。我只是希望在那里设置版本号。我应该简单地在父pom文件中添加所有依赖项还是做其他事情?

我如何在不损害项目的情况下解决这个问题?我如何找出为什么这些罐子不是同一个版本?

共有2个答案

宋飞文
2023-03-14

您要查找的关键字是“依赖排除”。Maven自动包含传递依赖项。您首先需要确定依赖项的来源。

您可以将输出重定向到一个文件,并通过在生成的tree.txt文件中搜索“jackson”进行详细分析,如下所示:

mvn dependency:tree -Dverbose > tree.txt

下一步是了解您是否可以升级一些库,以便它们自动为您使用正确版本的jackson库。

最后,如果明确希望排除可传递依赖项,可以使用

房时铭
2023-03-14

您很可能有通过不同依赖项作为子依赖项导入的不同版本。

您可以让maven向您展示所谓的“有效pom”,它将为您提供完整的依赖树,然后您可以从中查看包含的内容。

一些IDE(如IntelliJ)有一个以图形方式显示的选项,这使得查找此类冲突变得更加容易。

排除较低版本,如果需要,显式地向较新版本添加依赖项。

 类似资料:
  • 问题内容: 我已经更新了我的依赖性,就像您在评论中所说的那样,现在我有了这个: 这是我的新pom: 我必须精确地说,我从未使用过杰克逊,而且运行非常正常。也许是因为auf spring 5? 问题答案: 尝试使用最新的。我将其升级到了,现在可以使用了。

  • 问题内容: 假设我有一个豆子: 然后使用这种测试代码将其转换为JSON或XML: 输出将是这样的: 现在,假设我想用一些动态名称替换“ data”属性: 如果我调用函数 convert(“ toto”), 我将获得以下输出: 如果我调用函数 convert(“ groovy”), 我会得到以下输出: 当然,我可以在JSON创建后执行String替换,但是如果您对程序化方法有一个满意的答案,我会接受

  • 我是Spring world的新手,刚刚将pom.xml更新到gradle中来管理所有的依赖项。 格雷迪被社区抛弃了吗?还有,这个错误可能的根本原因是什么。 刚刚意识到Spring Boot有很多令人困惑的错误消息。我真的不认为这种错误消息对任何开发人员都有帮助。对这种错误有什么想法或方向吗? 我只知道我换了球。xml转换为gradle并手动迁移配置文件。非常感谢! 异常在线程"main"java

  • 有没有办法动态设置@JsonProperty注释,例如: 或者我可以简单地重命名实例的字段吗?如果是这样,请给我一个主意。此外,可以以何种方式与序列化一起使用?

  • 我正在spring boot应用程序中使用。当我向我的endpoint发送请求时,我会收到以下异常: 我的控制器处理具有以下结构的请求体: 我需要的唯一属性是。我构造了一个类来处理这个对象,如下所示: 我设计了一个像这样的控制器 这个问题的有趣之处在于,如果我将更改为以下结构,我的请求就会得到很好的处理: 我似乎搞不清问题是什么。在这个问题上我很想得到一些帮助。也许有我缺失的注释?我希望其他人也经

  • 我使用的是Spring数据Solr,我有以下Solr文档模型类,并有一个对应的SolrCrudRepository用于该类 我正在尝试在运行时修改注释“@SolrDocument(collection=“oldCollectionName”)”。 我有一个服务,它使用以下方法来查找使用存储库和模型类的所有文档 更改注释的代码如下所示 使用此方法,我正确地将newDocumentName设置到注释映