I'm updating an old Play project and upgrading to the latest version of Play, but am having some problems with swagger.
I get this error, which I don't know how to resolve:
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)
My config files are as follows:
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")
Does anyone know what might help, or where the error might lie?
The main blocker is that Play 2.8.8 is compatible with Jackson 2.11.x, not 2.12.x. You'll have to make sure to use only Jackson 2.11.x.
I'd recommend that you run sbt dependencyBrowseTree
to have a view of the dependency tree and make sure only Jackson version is used across all the dependencies. You can define some overrideDependencies
as well to help consistency.
It's also likely that you will need to: