Casbah Scala Ошибка выполнения

У меня есть веб-приложение на основе Play Framework, в файле 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)
        ........
        ........

Я совершенно не понимаю, почему это происходит? Какую дополнительную библиотеку мне не хватает?


person joesan    schedule 19.12.2013    source источник
comment
Какая версия скалы?   -  person smk    schedule 19.12.2013
comment
Это 2.10.3, который я использую из своего IntelliJ.   -  person joesan    schedule 19.12.2013


Ответы (3)


Вы не можете смешивать основные версии scala (видите, артефакт casbah скомпилирован для scala 2.9.*, тогда как scala_test предназначен для 2.10.*, а вы говорите, что используете 2.10 в intellij).

Ошибка говорит о том, что компилятор не может найти класс, который был вырезан из библиотеки scala начиная с версии 2.9.*, и решение состоит в том, чтобы выбрать правильную версию scala (подойдет любая версия 2.10.*).

person om-nom-nom    schedule 19.12.2013
comment
Должен ли я затем сделать резервную копию и использовать Scala 2.9? Как на это повлияет использование ScalaTest 2.10? Сомневаюсь, что есть версия Casbah для 2.10. Я бы посмотрел, если есть в наличии. - person joesan; 19.12.2013
comment
Спасибо за предложение. Я изменил зависимость драйвера Casbah на следующую: org.mongodb % casbah_2.10 % 2.5.1, и это сработало! - person joesan; 19.12.2013

Салат автор здесь. Решение состоит в том, чтобы исправить ваши файлы deps. Последняя стабильная версия Salat — 1.9.4, и она зависит от Casbah 2.6.4 — обе доступны для 2.9 и 2.10.

person prasinous    schedule 19.12.2013
comment
"org.mongodb" %% "casbah" % "2.6.4" и "com.novus" %% "salat-core" % "1.9.4" должны исправить ваш файл сборки. - person Ross; 19.12.2013
comment
Это не работает! sbt.ResolveException: неразрешенная зависимость: org.mongodb#casbah;2.6.4: не найдено - person joesan; 19.12.2013

Вместо того, чтобы использовать драйвер casbah непосредственно для игры, я вернулся к использованию плагина под названием play-salat (https://github.com/leon/play-salat).

На данный момент я использую "se.radley" % "play-plugins-salat_2.10" % "1.3.0" и хорошо работает в Play 2.2.

person Donovan    schedule 20.12.2013