Если я пытаюсь сравнить 2 значения DateTime времени joda в Scala, я получаю java.lang.NoClassDefFoundError.Как это исправить? - PullRequest
1 голос
/ 27 октября 2010

Вот пример:


import org.scala_tools.time.Imports._
...
val dt1 : DateTime = new DateTime ("2010-09-01T12:00Z")
val dt2 : DateTime = new DateTime ("2010-10-01T12:10Z")
println (dt1 < dt2) // This is the Main.scala:48 line mentioned in the stack trace below
...

Если я скомпилирую и запусту его, я получу


java.lang.NoClassDefFoundError: scala/Ordered
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.scala_tools.time.JodaImplicits$class.RichReadableInstant(Implicits.scala:70)
    at org.scala_tools.time.Imports$.RichReadableInstant(Imports.scala:20)
    at myproject.Main$.main(Main.scala:48)
...

В чем может быть причина и как это исправить?

Я использую все (joda-time, SBT, Scala, SUN JVM) последние стабильные выпуски (кроме joda-time - я использую его последнюю версию моментального снимка).

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Какую версию Scala вы используете? Убедитесь, что оболочки joda-time были скомпилированы с той же версией Scala.

Проверка текущих документов показала, что Ordered принадлежит scala.math. Был scala.Ordered, но это было до 2.8. Если быть точным, то там еще есть scala.Ordered - два на самом деле. Один - это val, а другой - псевдоним типа, оба определены в объекте пакета scala.

Кажется, что правильная оболочка joda-time находится по адресу http://www.scala -tools.org / repo-release / org / scala-tools / time / time_2.8.0 / 0.2 / - но это просто догадка .

4 голосов
/ 27 октября 2010

Ошибки ClassNotFound для класса из библиотеки Scala почти всегда , вызванные несовпадением версий.

Либо некоторые классы из вашего собственного проекта были скомпилированы с более старой версией Scala (в этом случае вам нужно выполнить чистую сборку), либо вы используете версию scala-tools / time, которая была скомпилирована с старая версия Scala.

...