1

这是一个例子:


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 - 我使用其最新的快照版本)。

4

2 回答 2

5

您使用的是什么 Scala 版本?确保 joda-time 包装器是使用相同的 Scala 版本编译的。

检查当前文档发现 Ordered 属于 scala.math。有一个 scala.Ordered 但它在 2.8 之前。准确地说,还有一个 scala.Ordered - 实际上是两个。一个是 val,另一个是类型别名,两者都在包对象 scala 中定义。

似乎正确的 joda-time 包装器位于http://www.scala-tools.org/repo-releases/org/scala-tools/time/time_2.8.0/0.2/ - 但它纯粹是猜测。

于 2010-10-27T04:37:25.847 回答
4

来自 Scala 库的类的 ClassNotFound 错误几乎总是由版本不匹配引起的。

您自己项目中的某些类是使用旧版本的 Scala 编译的(在这种情况下,您需要执行干净的构建),或者您使用的是使用旧版本编译的 scala-tools/time 版本斯卡拉。

于 2010-10-27T08:52:02.667 回答