【问题标题】:JacksonJsonSupport trait causes a NoSuchMethodError for initialize()JacksonJsonSupport trait 导致 initialize() 的 NoSuchMethodError
【发布时间】:2016-10-20 19:32:09
【问题描述】:

我正在检查 Scalatra 2.4 的 Scalatra "Handling JSON" tutorial,我收到了“NoSuchMethodError”:

Exception in thread "main" java.lang.NoSuchMethodError: org.scalatra.json.JacksonJsonSupport$class.initialize(Lorg/scalatra/json/JacksonJsonSupport;Ljava/lang/Object;)V
    at com.tutorial.FlowersController.initialize(FlowersController.scala:8)
    at com.tutorial.FlowersController.initialize(FlowersController.scala:8)
    at org.scalatra.ScalatraServlet$class.init(ScalatraServlet.scala:123)
    at com.tutorial.FlowersController.init(FlowersController.scala:8)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:595)
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:385)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:862)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:154)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
    at org.eclipse.jetty.server.Server.start(Server.java:357)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60)
    at org.eclipse.jetty.server.Server.doStart(Server.java:324)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.runner.Runner.run(Runner.java:509)
    at org.eclipse.jetty.runner.Runner.main(Runner.java:557)

我在控制器签名之后添加了“with JacksonJsonSupport”以及“受保护的隐式惰性 val jsonFormats:Formats = DefaultFormats”。我在顶部有两个导入,import org.json4s.{DefaultFormats, Formats} 和 import org.scalatra.json._

为了完整起见,我的 ScalatraBootstrap 没有包声明,如下:

import com.tutorial._
import org.scalatra._
import javax.servlet.ServletContext

class ScalatraBootstrap extends LifeCycle {
  override def init(context: ServletContext) {
    context.mount(new FlowersController, "/*")
  }
}

我在 build.scala 中添加了 "org.scalatra" %% "scalatra-json" % ScalatraVersion 和 "org.json4s" %% "json4s-jackson" % "3.3.0" 并重新启动了 sbt。我错过了什么?

【问题讨论】:

    标签: scala jackson scalatra


    【解决方案1】:

    我让它与“sbt clean”一起工作。该教程建议只需重新启动 sbt 以下载新的 jar,然后再次执行它,它工作正常,但我最初的尝试显然不太正确。我能想到的唯一区别是,我在 Docker 容器中运行了最初的尝试,也许这并不完美。

    【讨论】:

    • 对我不起作用...这是一个很难追踪的奇怪错误。这似乎也不是一个普遍的问题。