我正在尝试将项目中的Scala / Scalatra版本升级到以下内容:
scala 2.10.1
scalatra(和scalatra-scalate,scalatra-scalatest)2.2.0
使用sbt 0.11.3
代码编译正常但是,当运行使用scalatra TemplateEngine
的单元测试时或启动我们的jetty服务器(也使用scalatra)时,我收到以下错误。
有没有人见过这个?任何建议都非常感谢。
谢谢!
java.lang.NoClassDefFoundError: 斯卡拉/收集/ GenTraversableLike $类 在org.fusesource.scalate.TemplateEngine $$ anon $ 1.(TemplateEngine.scala:162) 在org.fusesource.scalate.TemplateEngine.sourceDirectoriesForwarder(TemplateEngine.scala:162) 在org.fusesource.scalate.TemplateEngine。(TemplateEngine.scala:114) 在com.springer.core.template.TemplateTestHelper $ class.beforeAll(TemplateTestHelper.scala:19) 在com.springer.core.template.SupportTemplateTest.beforeAll(SupportTemplateTest.scala:10) at org.scalatest.BeforeAndAfterAll $ class.beforeAll(BeforeAndAfterAll.scala:150) 在com.springer.core.template.SupportTemplateTest.beforeAll(SupportTemplateTest.scala:10)
答案 0 :(得分:0)
如果没有看到你的build.sbt或project / build.scala文件,很难确定,但这里有一些你可能想尝试的事情。
首先,我还没有发现任何人使用Scala 2.10.1尝试使用Scalatra 2.2.0,因此您在此处处于未知领域。从理论上讲,它应该可行,但快速降级到2.10.0会排除它。
其次,2.1.x和2.2.0之间的Scalate模板的默认连接发生了变化。
Scalatra 2.1.0在默认的g8项目框架中没有包含Scalate模板编译,这对于许多后来想要在生产中部署编译模板的人来说是一个混乱的来源。因此,默认的Scalatra 2.2.0项目框架带有一些新功能。
它连接已编译的模板,如下所示:
/* wire up the precompiled templates */
override protected def defaultTemplatePath: List[String] = List("/templates/views")
override protected def createTemplateEngine(config: ConfigT) = {
val engine = super.createTemplateEngine(config)
engine.layoutStrategy = new DefaultLayoutStrategy(engine,
TemplateEngine.templateTypes.map("/templates/layouts/default." + _): _*)
engine.packagePrefix = "templates"
engine
}
它还添加了Scalate template compiler:
addSbtPlugin("com.mojolly.scalate" % "xsbt-scalate-generator" % "0.4.2")
如果它不是与Scala 2.10.1相关的问题,我建议使用最简单的方法来确定它是否可以查看表示编译器(或生成并使用它) )使用最新的g8的新Scalatra 2.2.0项目框架。
答案 1 :(得分:0)
如何在构建中定义依赖项?他们使用%%而不是%
从2.2.x开始,我们需要%%之前的%%
这可能是您看到错误的原因