Klassenfehler mit Joda Time mit Scala

91

Ich füge das Joda Time-Repository zu SBT mit hinzu

libraryDependencies ++= Seq(
  "joda-time"         % "joda-time"           % "2.1"
)

Dann benutze ich es fröhlich so:

 val ymd = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd")
  ymd.parseDateTime("20121212")

Aber wenn ich das Projekt in SBT kompiliere, bekomme ich eine böse:

[warn] Class org.joda.convert.FromString not found - continuing with a stub.
[warn] Caught: java.lang.NullPointerException while parsing annotations in /home/jack/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.1.jar(org/joda/time/DateTime.class)
[error] error while loading DateTime, class file '/home/jack/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.1.jar(org/joda/time/DateTime.class)' is broken
[error] (class java.lang.RuntimeException/bad constant pool tag 10 at byte 42)

Ich habe die 2.0-Version von joda-time ausprobiert, erhalte aber den gleichen Fehler.

Jack
quelle

Antworten:

177

Fügen Sie diese Abhängigkeit hinzu:

org.joda% joda-convert% 1.8.1

Es ist eine optionale Abhängigkeit der Joda-Zeit. Ich musste es in mein eigenes Projekt einfügen, damit der Scala-Compiler die Arbeit mit dem Joda-Time-Jar akzeptieren konnte.

Ihr Problem scheint dasselbe zu sein.

Die Version ist zum Zeitpunkt der Bearbeitung, die neuesten Versionen finden Sie hier

David Pierre
quelle
61
Für die Zukunft ist der Grund, warum es für Scala nicht optional ist, dass der Java-Compiler eine Klasse mit fehlenden Anmerkungen laden kann und Scala nicht. Ich hatte das gleiche Problem, z. B. mit Guava und JSR-305.
Alexey Romanov
arbeitete für mich 12. Februar 2013 "joda-time" % "joda-time" % "2.1"und"org.joda" % "joda-convert" % "1.2"
Dustin Getz
9
Es ist inakzeptabel, dass eine Bibliothek nicht funktioniert, weil jemand dachte, es wäre pragmatisch, bestimmte Bibliotheken getrennt zu halten. Besonders die defacto Zeitbibliothek von Java.
Hassan Syed
Ich bin nicht 100% sicher, aber diese Abhängigkeit beeinflusst das Jodatime-Verhalten. Ich habe ein Projekt mit Dutzend Abhängigkeiten, aber ohne joda-convertdies ist String für Datetime yyyy-mm-ddThh-mm-ss. Ich habe ein einfaches Projekt mit jodatimeund joda-convertAbhängigkeiten erstellt, also habe ich darin yyyy-mm-ddThh-mm-ss.000Z.
Cherry
5
@ user2829759 Angenommen, Sie haben eine Abhängigkeit, a.jardie a enthält @B class A, woher die Annotation @Bstammt b.jar. In Java können Sie Ain Ihrem Code verwenden, wenn Sie a.jarohne b.jarauf dem Erstellungspfad haben; in Scala kann man nicht.
Alexey Romanov
1

Ich hatte ein ähnliches Problem:

[warn] Class net.jcip.annotations.NotThreadSafe not found - continuing with a stub.
[warn] Caught: java.lang.NullPointerException while parsing annotations in ~/.ivy2-p2/cache/org.opensaml/xmltooling/jars/xmltooling-1.3.4.jar(org/opensaml/xml/util/IDIndex.class)
[error] error while loading AttributeMap, class file '~/.ivy2-p2/cache/org.opensaml/xmltooling/jars/xmltooling-1.3.4.jar(org/opensaml/xml/util/AttributeMap.class)' is broken
[error] (class java.lang.RuntimeException/bad constant pool index: 0 at pos: 12058)

Das explizite Hinzufügen einer Abhängigkeit hat jcip-annotations-1.0.jardas Problem behoben.

mn2013
quelle