2010-10-27 4 views
1

Voici un exemple:Si j'essaie de comparer 2 valeurs DateTime joda-time dans Scala, j'obtiens java.lang.NoClassDefFoundError. Comment régler ceci?

 

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 
... 
 

Si je compile et exécute, je reçois

 

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) 
... 
 

Quelle peut être la raison et comment résoudre ce problème?

J'utilise tous (joda-time, SBT, Scala, SUN JVM) les dernières versions stables (excl joda-time - j'utilise sa dernière version de snapshot).

Répondre

5

Quelle version de Scala utilisez-vous? Assurez-vous que les wrappers joda-time ont été compilés avec la même version Scala.

Vérification des docs actuels révélés que Ordered appartient à scala.math. Il y avait une scala.Ordered mais c'était avant 2.8. Pour être précis, il y a toujours une scala.Ordered - deux en fait. L'un est un val et l'autre un alias de type, tous deux définis dans l'objet package scala.

Semble que le bon wrapper joda-time est situé à http://www.scala-tools.org/repo-releases/org/scala-tools/time/time_2.8.0/0.2/ - mais c'est une pure supposition.

+0

Exactement. J'ai remplacé My java scala-time par time_2.8.0-0.2.jar à partir de votre lien et le problème a disparu. J'utilisais time-2.8.0-SNAPSHOT-0.2-SNAPSHOT parce que je supposais que c'est plus récent, mais maintenant il semble que ce ne l'est pas. – Ivan

4

ClassNotFound erreurs pour la classe de la bibliothèque Scala sont presque toujours causés par une incompatibilité de version. Soit certaines des classes de votre propre projet ont été compilées avec une ancienne version de Scala (dans ce cas, vous devez effectuer une construction propre), soit vous utilisez une version de scala-tools/time qui a été compilée avec une version plus ancienne de Scala.

Questions connexes