Errore di classe rotta con Joda Time utilizzando Scala


91

Sto aggiungendo il repository Joda Time a SBT con

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

Quindi lo uso allegramente in questo modo:

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

Ma, quando compilo il progetto in SBT, ottengo un brutto:

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

Ho provato la versione 2.0 di joda-time, ma ottengo lo stesso errore.

Risposte:


177

Aggiungi questa dipendenza:

"org.joda"% "joda-convert"% "1.8.1"

È una dipendenza opzionale di joda-time. Ho dovuto aggiungerlo nel mio progetto affinché il compilatore scala accettasse di lavorare con joda-time jar.

Il tuo problema sembra essere lo stesso.

La versione è come al momento della modifica, le ultime versioni possono essere trovate qui


61
Per il futuro, il motivo per cui non è opzionale per Scala è che il compilatore Java può caricare una classe con annotazioni mancanti, e Scala no. Ho avuto lo stesso problema, ad esempio, con Guava e JSR-305.
Alexey Romanov

ha funzionato per me il 12 febbraio 2013 "joda-time" % "joda-time" % "2.1"e"org.joda" % "joda-convert" % "1.2"
Dustin Getz il

9
è inaccettabile che una libreria non funzioni perché qualcuno ha pensato che sarebbe stato pragmatico tenere separate alcune librerie. Soprattutto la libreria di tempo di fatto di Java.
Hassan Syed

Non sono sicuro al 100%, ma questa dipendenza influenza il comportamento jodatime. Ho un progetto con dozzine di dipendenze, ma senza joda-converttoString per Datetime lo è yyyy-mm-ddThh-mm-ss. Ho creato un progetto semplice con jodatimee dei joda-convertdipendenti, quindi in esso ho yyyy-mm-ddThh-mm-ss.000Z.
Cherry

5
@ user2829759 Supponiamo che tu abbia una dipendenza a.jarche contiene un @B class A, da cui @Bproviene l' annotazione b.jar. In Java, puoi usare Anel tuo codice se ne hai a.jarsenza b.jarnel percorso di compilazione; in Scala, non puoi.
Alexey Romanov

1

Stavo riscontrando un problema simile:

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

L'aggiunta esplicita di una dipendenza ha jcip-annotations-1.0.jarrisolto il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.