我突然在我的项目中遇到了一个奇怪的错误,这是一个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
型
我意识到在删除这个之后,问题就消失了。所以我相信这个测试依赖实际上是导致这个错误的原因,但是我需要这个库来进行测试。我如何修复这个错误?
1条答案
按热度按时间6ju8rftf1#
所有由项目传递(或直接)拉取的Jackson库必须具有相同的次要版本2.x。
在这里,您正在提取JacksonScala模块2.11.x,但显然也提取了Jackson数据绑定2.15.x。
这是因为您至少有两个依赖项,它们本身在不同的版本中拉取Jackson。
要解决此问题,您应该在
build.sbt
中定义dependencyOverrides
,以修复所有Jackson库的通用次要版本。