Play Framework 3.0.5与jackson-databind 2.17.0版本兼容问题求助
Play Framework 3.0.5 Jackson版本冲突解决方案
问题背景
我有一个Play Framework 3.0.5项目,因更新某模块需使用jackson-databind 2.17.0版本,但运行时出现版本不兼容错误。该模块必须依赖2.17.0版本,且Scala module 2.14.3是Play 3库的一部分,无法直接降级databind版本。
错误信息
[IJ][projectX] $ run --- (Running the application, auto-reloading is enabled) --- [error] com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.14.3 requires Jackson Databind version >=2.14.0 and <2.15.0 - Found jackson-databind version 2.17.0 [error] at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61) [error] at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:38) [error] at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17) [error] at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:908) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider$.configureObjectMapperModules$$anonfun$1(JacksonObjectMapperProvider.scala:252) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) [error] at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) [error] at scala.collection.immutable.List.foreach(List.scala:334) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider$.configureObjectMapperModules(JacksonObjectMapperProvider.scala:253) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider$.createObjectMapper(JacksonObjectMapperProvider.scala:275) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider.create(JacksonObjectMapperProvider.scala:369) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider.getOrCreate$$anonfun$1(JacksonObjectMapperProvider.scala:327) [error] at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) [error] at org.apache.pekko.serialization.jackson.JacksonObjectMapperProvider.getOrCreate(JacksonObjectMapperProvider.scala:327) [error] at org.apache.pekko.serialization.jackson.JacksonJsonSerializer.(JacksonSerializer.scala:151) [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [error] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [error] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) [error] at org.apache.pekko.actor.ReflectiveDynamicAccess.createInstanceFor$$anonfun$1(ReflectiveDynamicAccess.scala:50) [error] at scala.util.Try$.apply(Try.scala:217) [error] at org.apache.pekko.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:54) [error] at org.apache.pekko.actor.ReflectiveDynamicAccess.createInstanceFor$$anonfun$2(ReflectiveDynamicAccess.scala:58) [error] at scala.util.Success.flatMap(Try.scala:266) [error] at org.apache.pekko.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:58) [error] at org.apache.pekko.serialization.Serialization$$anon$2$$anon$3.applyOrElse(Serialization.scala:411) [error] at org.apache.pekko.serialization.Serialization$$anon$2$$anon$3.applyOrElse(Serialization.scala:405) [error] at scala.util.Failure.recoverWith(Try.scala:249) [error] at org.apache.pekko.serialization.Serialization$$anon$2.applyOrElse(Serialization.scala:411) [error] at org.apache.pekko.serialization.Serialization$$anon$2.applyOrElse(Serialization.scala:403) [error] at scala.util.Failure.recoverWith(Try.scala:249) [error] at org.apache.pekko.serialization.Serialization.serializerOf(Serialization.scala:412) [error] at org.apache.pekko.serialization.Serialization.$anonfun$2(Serialization.scala:437) [error] at scala.collection.Iterator$$anon$9.next(Iterator.scala:584) [error] at scala.collection.immutable.HashMapBuilder.addAll(HashMap.scala:2406) [error] at scala.collection.immutable.HashMap$.from(HashMap.scala:2218) [error] at scala.collection.immutable.HashMap$.from(HashMap.scala:2194) [error] at scala.collection.MapOps$WithFilter.map(Map.scala:396) [error] at org.apache.pekko.serialization.Serialization.(Serialization.scala:437) [error] at org.apache.pekko.serialization.SerializationExtension$.createExtension(SerializationExtension.scala:28) [error] at org.apache.pekko.serialization.SerializationExtension$.createExtension(SerializationExtension.scala:28) [error] at org.apache.pekko.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:1177) [error] at org.apache.pekko.actor.ActorSystemImpl.loadExtensions$1$$anonfun$1(ActorSystem.scala:1220) [error] at scala.collection.immutable.Vector.foreach(Vector.scala:2124) [error] at org.apache.pekko.actor.ActorSystemImpl.loadExtensions$1(ActorSystem.scala:1229) [error] at org.apache.pekko.actor.ActorSystemImpl.loadExtensions(ActorSystem.scala:1233) [error] at org.apache.pekko.actor.ActorSystemImpl.liftedTree3$1(ActorSystem.scala:1054) [error] at org.apache.pekko.actor.ActorSystemImpl._start$lzyINIT1(ActorSystem.scala:1062) [error] at org.apache.pekko.actor.ActorSystemImpl._start(ActorSystem.scala:1041) [error] at org.apache.pekko.actor.ActorSystemImpl.start(ActorSystem.scala:1064) [error] at org.apache.pekko.actor.ActorSystem$.apply(ActorSystem.scala:282) [error] at org.apache.pekko.actor.ActorSystem$.apply(ActorSystem.scala:326) [error] at org.apache.pekko.actor.ActorSystem$.apply(ActorSystem.scala:300) [error] at play.core.server.DevServerStart$.mkServerActorSystem(DevServerStart.scala:90) [error] at play.core.server.DevServerStart$.mainDev$$anonfun$2(DevServerStart.scala:80) [error] at play.core.server.DevServerStart.mainDev$$anonfun$1(DevServerStart.scala:308) [error] at play.utils.Threads$.withContextClassLoader(Threads.scala:22) [error] at play.core.server.DevServerStart.mainDev(DevServerStart.scala:332) [error] at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:80) [error] at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:55) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [error] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] at java.base/java.lang.reflect.Method.invoke(Method.java:566) [error] at play.runsupport.Reloader$.startDevMode(Reloader.scala:314) [error] stack trace is suppressed; run last Compile / run for the full output [error] (Compile / run) com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.14.3 requires Jackson Databind version >=2.14.0 and <2.15.0 - Found jackson-databind version 2.17.0 [error] Total time: 2 s, completed 13 Feb 2025, 14:43:44
解决方案
1. 强制升级Jackson Scala Module版本
Jackson Scala Module与databind版本严格对齐,2.17.x版本的Scala Module完全兼容2.17.x的databind。在项目的build.sbt中添加依赖覆盖:
// 方法一:使用dependencyOverrides强制覆盖版本 dependencyOverrides += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.17.0" // 方法二:直接引入并强制使用该版本 libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.17.0" force()
2. 验证依赖一致性
执行以下命令检查依赖树,确认jackson-module-scala和jackson-databind均为2.17.0版本,无其他冲突依赖:
sbt dependencyTree
3. 检查Pekko序列化配置
错误源于Pekko使用Jackson进行序列化,若项目中有自定义的ObjectMapper配置,确保注册的是DefaultScalaModule的最新版本,避免手动指定旧版本模块。
内容的提问来源于stack exchange,提问作者Luuk D. Jansen
相关产品推荐
相关产品推荐

