使用Scala使用Joda Time进行类破坏的错误

Jac*_*ack 91 scala jodatime sbt

我正在将Joda Time存储库添加到SBT中

libraryDependencies ++= Seq(
  "joda-time"         % "joda-time"           % "2.1"
)
Run Code Online (Sandbox Code Playgroud)

然后我喜欢这样使用它:

 val ymd = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd")
  ymd.parseDateTime("20121212")
Run Code Online (Sandbox Code Playgroud)

但是,当我在SBT编译项目时,我感到很讨厌:

[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)
Run Code Online (Sandbox Code Playgroud)

我尝试了joda-time的2.0版本,但是得到了同样的错误.

Dav*_*rre 176

添加此依赖项:

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

这是joda-time的可选依赖.我不得不在我自己的项目中添加它,以便scala编译器接受使用joda-time jar.

你的问题似乎是一样的.

版本与编辑时相同,可在此处找到最新版本

  • 对于未来,Scala不可选的原因是Java编译器可以加载缺少注释的类,而Scala不会.我有同样的问题,例如Guava和JSR-305. (61认同)
  • 图书馆不起作用是不可接受的,因为有人认为将某些图书馆分开是务实的.特别是java的事实时间库. (9认同)
  • @ user2829759假设你有一个依赖`a.jar`,它包含一个`@B class A`,其中注释`@B`来自`b.jar`.在Java中,如果在构建路径上没有`b.jar`的`a.jar`,则可以在代码中使用`A`; 在斯卡拉,你不能. (5认同)