首页 > 解决方案 > 升级 Play 项目依赖项时出现 Jackson 'NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType' 错误

问题描述

我正在更新一个旧的 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$4)
  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)

我的配置文件如下:

构建.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"

插件.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")

有谁知道什么可能有帮助,或者错误可能在哪里?

标签: javaplayframeworkjacksonswagger

解决方案


主要障碍是 Play 2.8.8 与 Jackson 2.11.x 兼容,而不是 2.12.x。您必须确保仅使用 Jackson 2.11.x。

我建议您运行sbt dependencyBrowseTree以查看依赖关系树,并确保在所有依赖关系中仅使用 Jackson 版本。您也可以定义一些overrideDependencies以帮助保持一致性。

您也可能需要:


推荐阅读