Mas*_*oe2 13 java jackson maven
我在Intellij Idea 2018社区版中有一些测试代码,它有多个pom文件.当我运行任何testng注释测试时,我收到一条错误,上面写着"没有找到测试".看起来问题是由于异常堆栈跟踪的这一部分:
java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge
我搜索了一个解决方案,发现了这个 - https://github.com/FasterXML/jackson-annotations/issues/119和这个/sf/answers/3248424931/.当我们在项目中没有相同版本的这些jar时,看起来会出现此问题.
1)jackson-core(2.8.8)
2)jackson-databind(2.9.2)
3)jackson-annotations(2.8.5)
如您所见,我对所有罐子没有相同的版本.我查看了项目中的所有poms,但没有找到任何添加所有这些依赖项的地方.我希望只是在那里设置版本号.我应该简单地在父pom文件中添加所有依赖项还是做其他事情?
如何在不损害项目的情况下解决此问题?我怎么知道为什么这些罐子的版本不一样?
您很可能将通过不同依赖项导入的不同版本作为子依赖项.
您可以让maven向您展示所谓的"有效pom",它将为您提供完整的依赖树,然后您可以从中查看包含的内容.
某些IDE(如IntelliJ)可以选择以图形方式显示,这使得发现这样的冲突变得更加容易.
排除较低版本,如果需要,则明确地将依赖项添加到较新版本.
您要查找的关键字是“依赖项排除”。Maven自动包含传递依赖项。您首先需要确定依赖项来自何处。
您可以将输出重定向到文件并通过在tree.txt文件中搜索“ jackson”来进行详细分析,如下所示:
mvn dependency:tree -Dverbose > tree.txt
Run Code Online (Sandbox Code Playgroud)
下一步将确定您是否可以升级某些库,以便它们自动为您使用正确版本的杰克逊库。
最后,如果您明确希望排除传递性依赖项,则可以<exclusions>在某个内部使用标记<dependency>来排除添加到类路径中的某些第三方依赖项。例如,请参阅此SO问题。
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |