运行测试时 Scala 项目上的 Jackson Databind 版本错误

问题描述 投票:0回答:1

我在我的 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,在这里我可以看到 jackson databind 版本总是像这样被逐出:

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

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

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

我意识到删除这个后,问题就消失了。所以我相信这个测试依赖实际上导致了这个错误,但我需要这个库用于测试目的。我该如何修复这个错误?

scala jackson sbt io.fabric8 kubernetes-server-mock
1个回答
0
投票

您的项目传递(或直接)拉取的所有 Jackson 库必须具有相同的次要版本 2.x。

这里您正在拉取 Jackson Scala 模块 2.11.x,但显然也拉取了 Jackson Databind 2.15.x。

这是因为您至少有两个依赖项,它们本身将 Jackson 拉入不同的版本。

要解决这种情况,您应该在

dependencyOverrides
中定义
build.sbt
来修复所有 Jackson 库的通用次要版本。

© www.soinside.com 2019 - 2024. All rights reserved.