3

我正在尝试将我们项目中的 Scala/Scalatra 版本升级到以下版本:

  • 斯卡拉 2.10.1

  • scalatra (和 scalatra-scalate, scalatra-scalatest) 2.2.0

使用 sbt 0.11.3

代码编译正常,但是在运行使用 scalatra 的单元测试TemplateEngine或启动我们的码头服务器(也使用 scalatra)时,我收到以下错误。

有人见过这个吗?非常感谢任何建议。

谢谢!

java.lang.NoClassDefFoundError:在 org.fusesource.scalate.TemplateEngine$$anon$1.(TemplateEngine.scala:162) 在 org.fusesource.scalate.TemplateEngine.sourceDirectoriesForwarder(TemplateEngine.scala:162) 的 scala/collection/GenTraversableLike$class在 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) at com.springer.core.template.SupportTemplateTest.beforeAll(SupportTemplateTest.scala:10)

4

2 回答 2

0

您的依赖项是如何在构建中定义的?他们是否使用 %% 而不是 %
从 2.2.x 及更高版本开始,我们需要 %% 之前是 %
这可能是您看到的错误的原因

于 2013-03-28T06:18:29.193 回答
0

如果没有看到您的 build.sbt 或 project/build.scala 文件,很难确定,但这里有一些您可能想尝试的事情。

首先,我不知道有人在尝试 Scalatra 2.2.0 和 Scala 2.10.1,所以你在这里处于未知领域。从理论上讲,它应该可以工作,但是快速降级到 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 模板编译器

addSbtPlugin("com.mojolly.scalate" % "xsbt-scalate-generator" % "0.4.2")

如果它不是与 Scala 2.10.1 相关的问题,我建议确定它是否是演示编译器的最简单方法可能是使用最新的 g8 查看(或生成和使用)新的 Scalatra 2.2.0 项目框架.

于 2013-03-26T16:57:26.053 回答