Error de clase rota con Joda Time usando Scala

91

Estoy agregando el repositorio de Joda Time a SBT con

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

Entonces felizmente lo uso así:

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

Pero, cuando compilo el proyecto en SBT, obtengo un desagradable:

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

Probé la versión 2.0 de joda-time, pero aparece el mismo error.

Jack
fuente

Respuestas:

177

Agregue esta dependencia:

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

Es una dependencia opcional de joda-time. Tuve que agregarlo en mi propio proyecto para que el compilador scala aceptara trabajar con joda-time jar.

Tu problema parece ser el mismo.

La versión es como en el momento de la edición, las últimas versiones se pueden encontrar aquí

David Pierre
fuente
61
Para el futuro, la razón por la que no es opcional para Scala es que el compilador de Java puede cargar una clase con anotaciones faltantes, y Scala no. Tuve el mismo problema, por ejemplo, con Guava y JSR-305.
Alexey Romanov
trabajó para mí 12 de febrero de 2013, "joda-time" % "joda-time" % "2.1"y"org.joda" % "joda-convert" % "1.2"
Dustin Getz
9
Es inaceptable que una biblioteca no funcione porque alguien pensó que sería pragmático mantener separadas ciertas bibliotecas. Especialmente la biblioteca de tiempo defacto de Java.
Hassan Syed
No estoy seguro al 100%, pero esta dependencia afecta el comportamiento de jodatime. Tengo un proyecto con docenas de dependencias, pero sin joda-converteso toString for Datetime is yyyy-mm-ddThh-mm-ss. He creado un proyecto simple con jodatimey joda-convertdependencias, por lo que tengo yyyy-mm-ddThh-mm-ss.000Z.
Cherry
5
@ user2829759 Digamos que tiene una dependencia a.jarque contiene a @B class A, de donde @Bproviene la anotación b.jar. En Java, se puede utilizar Aen su código si tiene a.jarsin b.jaren la trayectoria de la estructura; en Scala, no puedes.
Alexey Romanov
1

Me estaba encontrando con un problema similar:

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

Agregar explícitamente una dependencia jcip-annotations-1.0.jarresolvió el problema.

mn2013
fuente