geting"没有找到生命周期课程!"在斯卡拉特拉

时间:2014-10-17 04:59:10

标签: scala jetty scalatra

我正在尝试使用sbt运行scalatra使用container:start命令但是我得到了#34;断言失败:找不到生命周期类!"消息,这是我得到的完整堆栈跟踪"最后一个容器:start" :

  

块引用   最后一个容器:重启   java.lang.AssertionError:断言失败:找不到生命周期类!           在scala.Predef $ .assert(Predef.scala:179)           在org.scalatra.servlet.ScalatraListener.probeForCycleClass(ScalatraListener.scala:50)           at org.scalatra.servlet.ScalatraListener.configureCycleClass(ScalatraListener.scala:64)           at org.scalatra.servlet.ScalatraListener.contextInitialized(ScalatraListener.scala:23)           at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)           at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:446)           at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:792)           at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:296)           在org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1359)           at 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)           at 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)           at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:154)           at 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)           at 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)           at 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)           at 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)           at 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)           at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)           在java.lang.Thread.run(Thread.java:744)   [error](容器:restart)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/*")
  }
} 

4 个答案:

答案 0 :(得分:9)

ScalatraBootstrap.scala应位于顶级包中,且不得包含package个名称。

删除ScalatraBootstrap.scala文件中的所有包装内容。

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

在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/*")
  }
}

答案 3 :(得分:0)

旧问题,但由于我刚刚遇到同样的问题No lifecycle class found并且之前的回复没有解决问题,所以做了以下事情:

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