Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法运行代码,因为java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge_Java_Maven_Jackson - Fatal编程技术网

无法运行代码,因为java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge

无法运行代码,因为java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge,java,maven,jackson,Java,Maven,Jackson,我在Intellij Idea 2018社区版中有一些测试代码,它有多个pom文件。当我运行任何带有testng注释的测试时,我得到一个错误,上面写着“未找到任何测试”。问题似乎是由于异常堆栈跟踪的这一部分造成的: java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge 我在谷歌上搜索了一个解决方案,找到了这个——还有这个。看起来这个问题是由于我们在项目中没有相同版本的JAR造成的 1) jackson

我在Intellij Idea 2018社区版中有一些测试代码,它有多个pom文件。当我运行任何带有testng注释的测试时,我得到一个错误,上面写着“未找到任何测试”。问题似乎是由于异常堆栈跟踪的这一部分造成的:

java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge

我在谷歌上搜索了一个解决方案,找到了这个——还有这个。看起来这个问题是由于我们在项目中没有相同版本的JAR造成的

1) jackson core(2.8.8)

2) 杰克逊数据绑定(2.9.2)

3) 杰克逊注释(2.8.5)

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


如何在不损害项目的情况下解决此问题?如何找出这些JAR不属于同一版本的原因?

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

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

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


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

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

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

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


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

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

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

mvn dependency:tree -Dverbose > tree.txt
下一步是了解您是否可以升级一些库,以便它们自动为您使用正确版本的jackson库


最后,如果明确希望排除可传递依赖项,可以在某个
中使用
标记来排除添加到类路径中的某些第三方依赖项。例如,请参见此项。

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

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

mvn dependency:tree -Dverbose > tree.txt
下一步是了解您是否可以升级一些库,以便它们自动为您使用正确版本的jackson库


最后,如果明确希望排除可传递依赖项,可以在某个
中使用
标记来排除添加到类路径中的某些第三方依赖项。例如,看看这个。

谢谢。我如何在intellij idea中以图形方式看待“有效pom”?另外,如何排除较低版本或显式地向较新版本添加依赖项?在编辑器中打开pom或在maven项目视图中选择它,右键单击->maven->显示依赖项。在社区版中可能不起作用。要排除对象,只需为其添加一个显式排除。要包含其他版本,只需将其作为依赖项添加。是的,社区版中没有该选项。我将尝试将其导入eclipse并使用其依赖关系视图特性。顺便说一句,我想学习如何以适当的方式解决这些问题。你能推荐一些链接吗,或者推荐一些谷歌搜索词来获得这些链接?谢谢。您也可以将maven用作命令行工具,并在项目目录中运行“mvn帮助:有效pom”。此外,您还可以使用“mvn dependency:tree-Dverbose-Dincludes=commons collections”来全面了解依赖项的来源。谢谢。我如何在intellij idea中以图形方式看待“有效pom”?另外,如何排除较低版本或显式地向较新版本添加依赖项?在编辑器中打开pom或在maven项目视图中选择它,右键单击->maven->显示依赖项。在社区版中可能不起作用。要排除对象,只需为其添加一个显式排除。要包含其他版本,只需将其作为依赖项添加。是的,社区版中没有该选项。我将尝试将其导入eclipse并使用其依赖关系视图特性。顺便说一句,我想学习如何以适当的方式解决这些问题。你能推荐一些链接吗,或者推荐一些谷歌搜索词来获得这些链接?谢谢。您也可以将maven用作命令行工具,并在项目目录中运行“mvn帮助:有效pom”。此外,您还可以使用“mvn dependency:tree-Dverbose-Dincludes=commons collections”来全面了解依赖项的来源。