2010-11-19 2 views
2

Ich möchte LocalDateTime vergleichen, aber am Ende mit einer Ausnahme enden.Was importiert werden soll, um <work for jodatime in Scala zu machen

Ich habe diese Klassen:

import org.scala_tools.time.Imports._ 
import org.scala_tools.time.Implicits._ 

case class Event(id: String, startDate: LocalDateTime, action: String) 

case class Events(events: List[Event], timeout: Int) { 

    val timeoutDt: LocalDateTime = new LocalDateTime().minusMinutes(timeout) 

    lazy val oldEvents = events.filter { (e: Event) => 
    e.startDate < timeoutDt 
    } 

    lazy val eventsToSend = events.filterNot { (e: Event) => 
    e.startDate < timeoutDt 
    } 
} 

ich diese Ausnahme bekam:

scala> import org.scala_tools.time.Imports._ 
scala> import org.scala_tools.time.Implicits._ 

scala> val d1 = new LocalDateTime("2010-11-17T10:10:10") 
d1: org.joda.time.LocalDateTime = 2010-11-17T10:10:10.000 

scala> val d2 = new LocalDateTime("2012-11-17T10:10:10") 
d2: org.joda.time.LocalDateTime = 2012-11-17T10:10:10.000 

scala> val e1 = new Event("a", d1, "a") 
scala> val e2 = new Event("b", d2, "b") 

scala> val es = Events(List(e1, e2), 10000) 

scala> val old = es.oldEvents 
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 scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.scala$tools$nsc$util$ScalaClassLoader$$super$findClass(ScalaClassLoader.scala:86) 
    at scala.tools.nsc.util.ScalaClassLoader$class.findClass(ScalaClassLoader.scala:51) 
    at scala.tools.nsc.util... 

Was habe ich vergessen?

======= EDIT ============

Ich bin mit Scala 2.8.0. Dank @ Alex, fand ich, dass die Abhängigkeit in der project/build/Project.scala Datei falsch war:

import java.io.File 
import sbt._ 

class Project(info: ProjectInfo) extends DefaultProject(info) { 
    // ... omitted code 

    // OBS: Must have this to access snapshots 
    val snap = ScalaToolsSnapshots 

    // Time 
    lazy val jodaTime = "joda-time" % "joda-time" % "1.6" 
    lazy val scalaTime = "org.scala-tools" % "time" % "2.8.0-SNAPSHOT-0.2-SNAPSHOT" // Does not work 
} 

~

Der folgende Code funktioniert:

import java.io.File 
import sbt._ 

class Project(info: ProjectInfo) extends DefaultProject(info) { 
    // ... omitted code 

    // Time 
    lazy val jodaTime = "joda-time" % "joda-time" % "1.6" 
    lazy val scalaTime = "org.scala-tools.time" % "time_2.8.0" % "0.2" 
} 

Immer noch nicht sicher, warum der Snapshot nicht tat Arbeit.

+1

Neben: Sie könnten 'partition' verwenden, um Ihre' Events' Klasse prägnanter zu machen. http://paste.pocoo.org/show/293570/ – missingfaktor

+0

Danke @missingfaktor Ich denke, ich hatte es eilig und dachte nicht viel nach. –

+0

Darf ich fragen, welche Scala-Version Sie verwenden? Ich habe ein kleines sbt-Projekt mit deinem Code erstellt und es funktioniert mit scala 2.8.1. Hier ist der Code https://gist.github.com/706675 Wenn Sie möchten, kann ich das gesamte Projekt hochladen. – fedesilva

Antwort

4

bedeutet, dass Sie entweder ein Scala-Versionskonflikt oder ein Klassenpfadproblem haben.

Höchstwahrscheinlich wurde die Bibliothek, die Sie verwenden, nicht für Ihre aktuelle Scala-Version kompiliert.

+0

Danke @Alex, du bist richtig, siehe meine Bearbeitung. –

Verwandte Themen