java - 升级 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")
有谁知道什么可能有帮助,或者错误可能在哪里?
解决方案
主要障碍是 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
- 或者,使用https://github.com/dwickern/swagger-play上提供的swagger-play2的分支
推荐阅读
- reporting-services - PowerBI Server - View reports in mobile format
- android - 为什么我的图像视图会在具有不同横向布局文件的方向更改时消失?
- reactjs - React HighChart 示例
- c# - 在 C# WPF 中将某些文本复制到剪贴板时出错
- php - 如何在不呈现 httpException 页面的情况下使用 symfony 捕获异常
- python - 在 Geopandas 中进行交叉时出现 TopologyException 问题?
- delphi - 将带有证书处理的 2007 C++Builder SOAP 代码移至 Delphi2018-Indy10
- php - 带有 PayPal REST API 的信用卡
- sas - Proc Report - 两个表的行
- python - 芹菜任务未在部署在 Heroku 上的 Django 应用程序中执行