发现"没有找到生命周期类!" 在斯卡拉特拉

use*_*007 2 scala jetty scalatra

我试图用sbt运行scalatra使用容器:启动命令,但我得到"断言失败:找不到生命周期类!" 消息,这是我用"最后一个容器:开始"得到的完整堆栈跟踪:

Blockquote最后一个容器:重启java.lang.AssertionError:断言失败:找不到生命周期类!at org.scalatra.servlet.ScalatraListener.probeForCycleClass(ScalatraListener.scala:50)的scala.Predef $ .assert(Predef.scala:179)org.scalatra.servlet.ScalatraListener.configureCycleClass(ScalatraListener.scala:64)at org org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler)上的org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)中的.scalatra.servlet.ScalatraListener.contextInitialized(ScalatraListener.scala:23) .java:446)org.eclipse中的org.eclipse.jetty.server.hand.ConartHandler.startContext(ContextHandler.java:772)org.eclipse中的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:296). jetg.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)at 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)在有机eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107)在org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:60)在org.eclipse.jetty.server.handler.位于org.eclipse.jetty.uart.start(AbstractLifeCycle.java:68)的org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:)中的ContextHandlerCollection.doStart(ContextHandlerCollection.java:154): 125)在org.eclipse.jetty.server.Server.start(Server.java:358)在org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107)在org.eclipse.jetty.server .edler.AbstractHandler.doStart(AbstractHandler.java:60)位于org.eclipse.jet.服务中的org.eclipse.jet.服务.服务器.服务器上的org.eclipse.jet.Server.doStart(Server.java:325).AbstractLifeCycle.start (AbstractLifeCycle.java:68)com.earldouglas.xsbtwebplugin.Jetty9Runner.start(Jetty9Runner.scala:122)at com.earldouglas.xsbtwebplugin.Container $$ anonfun $ containerSettings $ 11.apply(Container.scala:77)at com. earldouglas.xsbtwebplugin.Container $$ anonfun $ $ containerSettings 11.apply(Container.scala:74)在scala.Function8 $$ anonfun $ $ tupled 1.适用(Function8.scala:35)在scala.Function8 $$ anonfun $ $ tupled 1 apply(Function8.scala:34)at scala.Function1 $$ anonfun $ compose $ 1.apply(Function1.scala:47)at sbt.$ tilde $ greater $$ anonfun $$ u2219 $ 1.apply(TypeFunctions.scala:42) at sbt.std.Transform $$ anon $ 4.work(System.scala:64)at sbt.Execute $$ anonfun $ submit $ 1 $$ anonfun $ apply $ 1.apply(Execute.scala:237)at sbt.Execute $$ anonfun $提交$ 1 $$ anonfun $ $适用1.适用(Execute.scala:237)在sbt.ErrorHandling $ .wideConvert(ErrorHandling.scala:18)在sbt.Execute.work(Execute.scala:244)在sbt.Execute $$ anonfun $提交$ 1.apply(Execute.scala:237)在sbt.Execute $$ anonfun $ submit $ 1.apply(Execute.scala:237)at sbt.ConcurrentRestric tions $$ anon $ 4 $$ anonfun $ 1.apply(ConcurrentRestrictions.scala:160)at sbt.CompletionService $$ anon $ 2.call(CompletionService.scala:30)at 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)at java.lang.Thread.run(Thread.java:744)[error](container: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/*")
  }
} 
Run Code Online (Sandbox Code Playgroud)

小智 9

ScalatraBootstrap.scala应该是顶级包装,没有任何package名称.

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


小智 5

您可以将bootstrap类放在top,无名包中,或者像这样设置相关的context参数:

context.setInitParameter(ScalatraListener.LifeCycleKey,
  "my.package.MyScalatraBootstrap")
Run Code Online (Sandbox Code Playgroud)

  • 尽管在**JettyMain**的> def main(args:Array [String])中设置**LifeCycleKey**,如下所示,webAppContext setInitParameter(ScalatraListener.LifeCycleKey,"com.example.app.ScalatraBootstrap")我得到java. lang.AssertionError:断言失败:找不到生命周期类!知道这里出了什么问题吗? (2认同)