我有一个基于Play框架的webapp,它的build.sbt文件中定义了以下内容:
....
version := "1.0-SNAPSHOT"
resolvers += "Sonatype Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
resolvers += "Sonatype Releases" at "https://oss.sonatype.org/content/groups/scala-tools"
resolvers += "Novus Releases" at "http://repo.novus.com/releases/"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
"com.mongodb.casbah" % "casbah_2.9.0" % "2.2.0-SNAPSHOT",
"com.novus" %% "salat-core" % "1.9.2",
"org.scalatest" % "scalatest_2.10" % "2.0" % "test",
"com.typesafe" % "config" % "1.0.2"
)
....
Scala 版本是 2.10.3,当我尝试运行单元测试时,我遇到了以下错误:
A needed class was not found. This could be due to an error in your runpath. Missing class: scala/reflect/ClassManifest
java.lang.NoClassDefFoundError: scala/reflect/ClassManifest
at com.mongodb.casbah.Imports$.<init>(Implicits.scala:113)
at com.mongodb.casbah.Imports$.<clinit>(Implicits.scala)
at com.mongodb.casbah.MongoConnection.apply(MongoConnection.scala:177)
........
........
我完全不知道为什么会这样?我缺少哪个额外的库?
你不能混合主要的 scala 版本(参见,casbah 工件是针对 scala 2.9.* 编译的,而 scala_test 是针对 2.10.*,你说你在 intellij 中使用 2.10)。
该错误说,编译器找不到自 2.9.* 时代以来从 scala 库中删除的类,解决方案是选择正确的 scala 版本(任何 2.10.* 都适合)。
萨拉特的作者在这里。 解决方案是修复您的部门。 Salat 的最新稳定版本是 1.9.4,它依赖于 Casbah 2.6.4 - 两者都可用于 2.9 和 2.10。
我没有直接使用 casbah 驱动程序进行游戏,而是重新使用一个名为 play-salat (https://github.com/leon/play-salat) 的插件。
我目前使用的一个是"se.radley" % "play-plugins-salat_2.10" % "1.3.0",在 Play 2.2 中运行良好。