【问题标题】:geting "No lifecycle class found!" in scalatra得到“找不到生命周期类!”在斯卡拉特拉
【发布时间】:2014-12-12 15:11:10
【问题描述】:

我正在尝试使用 container:start 命令运行带有 sbt 的 scalatra,但我得到“断言失败:未找到生命周期类!”消息,这是我使用“last container:start”得到的完整堆栈跟踪:

块引用 最后一个容器:重新启动 java.lang.AssertionError:断言失败:找不到生命周期类! 在 scala.Predef$.assert(Predef.scala:179) 在 org.scalatra.servlet.ScalatraListener.probeForCycleClass(ScalatraListener.scala:50) 在 org.scalatra.servlet.ScalatraListener.configureCycleClass(ScalatraListener.scala:64) 在 org.scalatra.servlet.ScalatraListener.contextInitialized(ScalatraListener.scala:23) 在 org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800) 在 org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:446) 在 org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:792) 在 org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:296) 在 org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1359) 在 org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1352) 在 org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744) 在 org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在 org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:125) 在 org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107) 在 org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:154) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在 org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:125) 在 org.eclipse.jetty.server.Server.start(Server.java:358) 在 org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107) 在 org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60) 在 org.eclipse.jetty.server.Server.doStart(Server.java:325) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 在 com.earldouglas.xsbtwebplugin.Jetty9Runner.start(Jetty9Runner.scala:122) 在 com.earldouglas.xsbtwebplugin.Container$$anonfun$containerSettings$11.apply(Container.scala:77) 在 com.earldouglas.xsbtwebplugin.Container$$anonfun$containerSettings$11.apply(Container.scala:74) 在 scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35) 在 scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34) 在 scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 在 sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42) 在 sbt.std.Transform$$anon$4.work(System.scala:64) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237) 在 sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 在 sbt.Execute.work(Execute.scala:244) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237) 在 sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) 在 sbt.CompletionService$$anon$2.call(CompletionService.scala:30) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744) [错误](容器:重新启动)java.lang.AssertionError:断言失败:找不到生命周期类! 块引用

这是我的 LifeCycle 文件,名为:“ScalatraBootstrap.scala”,其内容为:

import org.Server.Controllers.Controller2
import org.scalatra.example.Server._
import org.scalatra.LifeCycle
import javax.servlet.ServletContext

class ScalatraBootstrap extends LifeCycle {
  implicit val swagger = new FlowSwagger
  override

  def init(context: ServletContext) {
    context.mount(new Controller1, "/*") context.mount(new Controller2, "/string1/*") context.mount(new Controller3, "/string2/*")
  }
} 

【问题讨论】:

    标签: scala jetty scalatra


    【解决方案1】:

    ScalatraBootstrap.scala 应该在没有任何package 名称的顶级包中。

    删除您在 ScalatraBootstrap.scala 文件中的所有软件包声明。

    【讨论】:

      【解决方案2】:

      您可以将引导类放在顶层的无名包中,或者像这样设置相关的上下文参数:

      context.setInitParameter(ScalatraListener.LifeCycleKey,
        "my.package.MyScalatraBootstrap")
      

      【讨论】:

      • 尽管在JettyMain的> def main(args: Array[String])中设置LifeCycleKey如下图,webAppContext setInitParameter(ScalatraListener.LifeCycleKey, “com.example.app.ScalatraBootstrap”)我得到 java.lang.AssertionError:断言失败:找不到生命周期类!知道这里出了什么问题吗?
      【解决方案3】:

      在 scalatra 中,您需要有一个扩展 LifeCycle 的类。这是文档中的一个示例

      请注意,在您的 src/main/scala 目录中还有一个名为 Scalatra.scala 的文件。这是 Scalatra 引导配置文件,您应该在其中完成大部分应用配置工作。

      这个文件的最简单版本是在您使用 giter8 模板创建新项目时生成的,如下所示:

      import org.scalatra.LifeCycle
      import javax.servlet.ServletContext
      import org.yourdomain.projectname._
      
      class ScalatraBootstrap extends LifeCycle {
      
        override def init(context: ServletContext) {
      
          // mount servlets like this:
          context mount (new ArticlesServlet, "/articles/*")
        }
      }
      

      【讨论】:

      • 我的文件名为:"ScalatraBootstrap.scala",其内容为:import org.Server.Controllers.Controller2 import org.scalatra.example.Server._ import org.scalatra.LifeCycle import javax。 servlet.ServletContext class ScalatraBootstrap extends LifeCycle {implicit val swagger = new FlowSwagger override def init(context: ServletContext) { context.mount(new Controller1, "/*") context.mount(new Controller2, "/string1/*") context .mount(new Controller3, "/string2/*") } }
      【解决方案4】:

      老问题,但是因为我刚刚遇到了同样的问题No lifecycle class found 并且之前的回复并没有解决它,所以解决了这个问题:

      我的案例的解决方案很简单。我已将ScalatraBootstrap.scala 放置到src/main,IntelliJ 没有给出错误。正确的路径是src/main/scala。这也显示在Scalatra project structure 页面中,但格式可能会导致将其放置在错误的位置。 src/main/scala/ScalatraBootstrap.scala 完美运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 2017-10-23
        • 1970-01-01
        • 1970-01-01
        • 2019-12-25
        • 2021-07-30
        • 2011-09-16
        相关资源
        最近更新 更多