我正在尝试使用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/*")
}
}
答案 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
效果很好。