运行测试时Scala项目上的Jackson数据绑定版本错误

qpgpyjmq  于 6个月前  发布在  Scala
关注(0)|答案(1)|浏览(166)

我突然在我的项目中遇到了一个奇怪的错误,这是一个Play Framework应用程序。直到昨天,我的sbt测试运行良好,现在它失败了,运行中止。唯一的区别是我添加了一个新的依赖项:

"io.fabric8" % "kubernetes-client" % "6.9.0",

字符串
当我跑
SBT清洁试验
我收到以下错误消息:

An exception or error caused a run to abort: Scala module 2.11.4 requires Jackson Databind version >= 2.11.0 and < 2.12.0 
com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.11.4 requires Jackson Databind version >= 2.11.0 and < 2.12.0
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:46)
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17)
    at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:879)
    at akka.serialization.jackson.JacksonObjectMapperProvider$.$anonfun$configureObjectMapperModules$4(JacksonObjectMapperProvider.scala:242)
    at akka.serialization.jackson.JacksonObjectMapperProvider$.$anonfun$configureObjectMapperModules$4$adapted(JacksonObjectMapperProvider.scala:241)
    at scala.collection.immutable.List.foreach(List.scala:333)
    at akka.serialization.jackson.JacksonObjectMapperProvider$.configureObjectMapperModules(JacksonObjectMapperProvider.scala:241)
    at akka.serialization.jackson.JacksonObjectMapperProvider$.createObjectMapper(JacksonObjectMapperProvider.scala:265)
    at akka.serialization.jackson.JacksonObjectMapperProvider.create(JacksonObjectMapperProvider.scala:359)
    at akka.serialization.jackson.JacksonObjectMapperProvider.$anonfun$getOrCreate$1(JacksonObjectMapperProvider.scala:317)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at akka.serialization.jackson.JacksonObjectMapperProvider.getOrCreate(JacksonObjectMapperProvider.scala:317)
    at akka.serialization.jackson.JacksonJsonSerializer.<init>(JacksonSerializer.scala:141)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at akka.actor.ReflectiveDynamicAccess.$anonfun$createInstanceFor$1(ReflectiveDynamicAccess.scala:40)
    at scala.util.Try$.apply(Try.scala:210)


我真的不知道它是从哪里拉scala模块2.11的,因为我的项目依赖于scala 2.13。我运行了sbt dependencyTree,在这里我可以看到Jacksondatabind版本总是像这样被驱逐:

+-com.fasterxml.jackson.core:jackson-databind:2.11.4 (evicted by: 2.15.2)


我还有一个类似这样的测试依赖项:

"io.fabric8" % "kubernetes-server-mock" % "6.9.0" % Test


我意识到在删除这个之后,问题就消失了。所以我相信这个测试依赖实际上是导致这个错误的原因,但是我需要这个库来进行测试。我如何修复这个错误?

6ju8rftf

6ju8rftf1#

所有由项目传递(或直接)拉取的Jackson库必须具有相同的次要版本2.x。
在这里,您正在提取JacksonScala模块2.11.x,但显然也提取了Jackson数据绑定2.15.x。
这是因为您至少有两个依赖项,它们本身在不同的版本中拉取Jackson。

要解决此问题,您应该在build.sbt中定义dependencyOverrides,以修复所有Jackson库的通用次要版本。

相关问题