Jackson 'NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType' error when upgrading Play project dependencies
Jackson 'NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType' error when upgrading Play project dependencies
我正在更新一个旧的 Play 项目并升级到最新版本的 Play,但我在使用 swagger 时遇到了一些问题。
我收到此错误,但我不知道如何解决:
Error injecting constructor, java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType(Lcom/fasterxml/jackson/databind/type/TypeBindings;)Lcom/fasterxml/jackson/databind/JavaType;
at play.modules.swagger.SwaggerPluginImpl.<init>(SwaggerPlugin.scala:35)
while locating play.modules.swagger.SwaggerPluginImpl
at play.modules.swagger.SwaggerModule.bindings(SwaggerModule.scala:11):
Binding(interface play.modules.swagger.SwaggerPlugin to ConstructionTarget(class play.modules.swagger.SwaggerPluginImpl) eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon)
while locating play.modules.swagger.SwaggerPlugin
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType(Lcom/fasterxml/jackson/databind/type/TypeBindings;)Lcom/fasterxml/jackson/databind/JavaType;
at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:424)
at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:202)
at io.swagger.scala.converter.SwaggerScalaModelConverter.resolve(SwaggerScalaModelConverter.scala:90)
我的配置文件如下:
build.sbt
name := """accepter"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(SbtPlugin, PlayJava, PlayEbean)
scalaVersion := "2.12.12"
retrieveManaged := true
libraryDependencies ++= Seq(
javaJdbc,
javaWs,
filters,
ws,
guice,
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.2",
"io.swagger" %% "swagger-play2" % "1.7.1",
"com.h2database" % "h2" % "1.4.200",
"org.mariadb.jdbc" % "mariadb-java-client" % "2.7.3",
"com.amazonaws" % "aws-java-sdk-sns" % "1.12.6",
"com.typesafe.play" %% "play-ahc-ws-standalone" % "2.1.3",
"com.typesafe.play" %% "play-ws" % "2.8.8",
"com.google.inject" % "guice" % "4.2.3",
"com.typesafe.play" %% "play-guice" % "2.8.8"
)
EclipseKeys.preTasks := Seq(compile in Compile)
EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)
Test / javaOptions += "-Dconfig.file=conf/application.test.conf"
plugins.sbt
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.8")
// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.10")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.2")
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.5.1")
// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.2.2")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "6.0.0")
有谁知道什么可能有帮助,或者错误可能出在哪里?
主要障碍是 Play 2.8.8 与 Jackson 2.11.x 兼容,而不是 2.12.x。您必须确保只使用 Jackson 2.11.x.
我建议您 运行 sbt dependencyBrowseTree
查看依赖关系树并确保在所有依赖关系中只使用 Jackson 版本。您也可以定义一些 overrideDependencies
以帮助保持一致性。
您还可能需要:
- 要么摆脱不再维护且与 Play 2.8 和 Jackson 2.11 不兼容的 swagger-play2
- 或者,使用 swagger-play2 的分支 https://github.com/dwickern/swagger-play
我正在更新一个旧的 Play 项目并升级到最新版本的 Play,但我在使用 swagger 时遇到了一些问题。
我收到此错误,但我不知道如何解决:
Error injecting constructor, java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType(Lcom/fasterxml/jackson/databind/type/TypeBindings;)Lcom/fasterxml/jackson/databind/JavaType;
at play.modules.swagger.SwaggerPluginImpl.<init>(SwaggerPlugin.scala:35)
while locating play.modules.swagger.SwaggerPluginImpl
at play.modules.swagger.SwaggerModule.bindings(SwaggerModule.scala:11):
Binding(interface play.modules.swagger.SwaggerPlugin to ConstructionTarget(class play.modules.swagger.SwaggerPluginImpl) eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon)
while locating play.modules.swagger.SwaggerPlugin
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType(Lcom/fasterxml/jackson/databind/type/TypeBindings;)Lcom/fasterxml/jackson/databind/JavaType;
at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:424)
at io.swagger.jackson.ModelResolver.resolve(ModelResolver.java:202)
at io.swagger.scala.converter.SwaggerScalaModelConverter.resolve(SwaggerScalaModelConverter.scala:90)
我的配置文件如下:
build.sbt
name := """accepter"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(SbtPlugin, PlayJava, PlayEbean)
scalaVersion := "2.12.12"
retrieveManaged := true
libraryDependencies ++= Seq(
javaJdbc,
javaWs,
filters,
ws,
guice,
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.2",
"io.swagger" %% "swagger-play2" % "1.7.1",
"com.h2database" % "h2" % "1.4.200",
"org.mariadb.jdbc" % "mariadb-java-client" % "2.7.3",
"com.amazonaws" % "aws-java-sdk-sns" % "1.12.6",
"com.typesafe.play" %% "play-ahc-ws-standalone" % "2.1.3",
"com.typesafe.play" %% "play-ws" % "2.8.8",
"com.google.inject" % "guice" % "4.2.3",
"com.typesafe.play" %% "play-guice" % "2.8.8"
)
EclipseKeys.preTasks := Seq(compile in Compile)
EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)
Test / javaOptions += "-Dconfig.file=conf/application.test.conf"
plugins.sbt
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.8")
// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.10")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.2")
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.5.1")
// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.2.2")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "6.0.0")
有谁知道什么可能有帮助,或者错误可能出在哪里?
主要障碍是 Play 2.8.8 与 Jackson 2.11.x 兼容,而不是 2.12.x。您必须确保只使用 Jackson 2.11.x.
我建议您 运行 sbt dependencyBrowseTree
查看依赖关系树并确保在所有依赖关系中只使用 Jackson 版本。您也可以定义一些 overrideDependencies
以帮助保持一致性。
您还可能需要:
- 要么摆脱不再维护且与 Play 2.8 和 Jackson 2.11 不兼容的 swagger-play2
- 或者,使用 swagger-play2 的分支 https://github.com/dwickern/swagger-play