Scalatra首次启动jetty报错not found: object scalate等问题求解
问题原因
- 版本适配差:《Scalatra In Action》教程配套的是较早的Scalatra 2.x早期版本,你通过g8生成的是新版Scalatra项目,核心架构变动较大,Scalate模板支持已经从核心库拆分,不会默认随Scalatra核心安装,需要手动引入依赖。
- 自定义栈类缺失:示例代码中控制器继承的
ScalatraCmsStack是项目自定义的公共父特质,你未按照教程前置步骤创建该文件,因此编译器无法识别该类,连带父类中内置的get、contentType、params、ssp等方法和属性也全部无法识别。
解决步骤
- 补全Scalate依赖
打开项目根目录的build.sbt,在libraryDependencies配置块中添加Scalate扩展依赖,注意版本要和项目内已有的Scalatra核心依赖版本一致:
libraryDependencies ++= Seq( "org.scalatra" %% "scalatra-scalate" % "<你的Scalatra核心版本号>", "org.eclipse.jetty" % "jetty-webapp" % "9.4.44.v20210927" % "container;compile" )
- 创建自定义栈特质
在src/main/scala/com/example/cms目录下新建ScalatraCmsStack.scala文件,写入以下内容:
package com.example.cms import org.scalatra._ import scalate.ScalateSupport trait ScalatraCmsStack extends ScalatraServlet with ScalateSupport
- 检查控制器导入
确认你的PagesController.scala顶部有正确的包声明和核心类导入:
package com.example.cms import org.scalatra._
- 重启服务
回到sbt交互终端,先执行reload命令加载新依赖,再执行~jetty:start启动服务即可。
内容的提问来源于stack exchange,提问作者emalcolmb
相关产品推荐
相关产品推荐

