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.