Lỗi hỏng lớp với Joda Time sử dụng Scala


91

Tôi đang thêm kho lưu trữ Joda Time vào SBT với

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

Sau đó, tôi vui vẻ sử dụng nó như thế này:

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

Nhưng, khi tôi biên dịch dự án trong SBT, tôi nhận được một điều khó chịu:

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

Tôi đã thử phiên bản 2.0 của joda-time, nhưng gặp lỗi tương tự.

Câu trả lời:


177

Thêm phần phụ thuộc này:

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

Đó là một phụ thuộc tùy chọn của joda-time. Tôi đã phải thêm nó vào dự án của riêng mình để trình biên dịch scala chấp nhận làm việc với joda-time jar.

Vấn đề của bạn có vẻ giống nhau.

Phiên bản tại thời điểm chỉnh sửa, các phiên bản mới nhất có thể được tìm thấy tại đây


61
Đối với tương lai, lý do nó không phải là tùy chọn cho Scala là trình biên dịch Java có thể tải một lớp với các chú thích bị thiếu, còn Scala thì không. Tôi đã gặp vấn đề tương tự, ví dụ: với Guava và JSR-305.
Alexey Romanov

đã làm việc cho tôi vào ngày 12 tháng 2 năm 2013, "joda-time" % "joda-time" % "2.1""org.joda" % "joda-convert" % "1.2"
Dustin Getz

9
Không thể chấp nhận được việc một thư viện không hoạt động vì ai đó nghĩ rằng sẽ thực dụng nếu giữ một số thư viện riêng biệt. Đặc biệt là thư viện thời gian defacto của java.
Hassan Syed

Tôi không chắc chắn 100%, nhưng sự phụ thuộc này ảnh hưởng đến hành vi jodatime. Tôi có một dự án với hàng tá phụ thuộc, nhưng không có joda-converttoString cho Datetime yyyy-mm-ddThh-mm-ss. Tôi đã tạo dự án đơn giản với jodatimevà các joda-convertphụ thuộc, vì vậy tôi có trong đó yyyy-mm-ddThh-mm-ss.000Z.
Cherry

5
@ user2829759 Giả sử bạn có một phụ thuộc a.jarchứa a @B class A, chú thích @Bđến từ đâu b.jar. Trong Java, bạn có thể sử dụng Atrong mã của mình nếu bạn có a.jarmà không có b.jartrên đường dẫn xây dựng; trong Scala, bạn không thể.
Alexey Romanov

1

Tôi đã gặp sự cố tương tự:

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

Thêm một phần phụ thuộc rõ ràng đã jcip-annotations-1.0.jargiải quyết được vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.