2015-12-02 13 views
5

Tôi là một kỹ sư mới làm quen với kinh nghiệm viết PHP, python và ruby. Tôi đang cố gắng đóng góp cho một dự án viết bằng clojure. Tôi đang cố gắng thêm một thư viện vào dự án, nhưng sau khi thêm thư viện và chạy lein uberjar, tôi nhận được một lỗi. Tôi muốn biết ý nghĩa của nó và liệu bạn có thể đề xuất phương pháp khắc phục sự cố không. Cảm ơn rất nhiều về sự trợ giúp của bạn!Thêm phụ thuộc vào clojure và chạy lein uberjar gây ra java.lang.IllegalAccessError

Những gì tôi đang cố gắng để đạt Bao gồm uap-clj library trong dự án của tôi và biên dịch các dự án thành một jarfile.

Tôi đã viết Tôi đã thêm thư viện làm mục thứ hai vào danh sách phụ thuộc.

:dependencies [[lots-of-dependencies] 
       [uap-clj "1.1.1"] ; user agent parser 
       [another-dependency]] 

gì tôi chạy trong Lein According to the instructions on github, sau khi lưu thay đổi của tôi để project.clj, tôi chạy lein deps sau đó lein clean && lein uberjar.

gì đã xảy ra Sau khi cập nhật và lưu tập tin, chạy lệnh cung cấp cho các lỗi sau đây trước khi một stacktrace dài:

java.lang.IllegalAccessError: tried to access method clojure.lang.RT.classForNameNonLoading(Ljava/lang/String;)Ljava/lang/Class; from class clj_yaml.core$loading__5340__auto____29, compiling:(flexmaster.clj:1:1) 

tôi đã cố gắng gì nữa tôi muốn kiểm tra xem tôi đã làm một sai lầm khi thêm thư viện. Tôi đã tạo một dự án clojure mới từ đầu và tạo ra một jarfile bằng cách sử dụng lein deps và sau đó lein uberjar. Tiếp theo, tôi đã thêm uap-clj vào: dependencies trong dự án mới của tôi, đã lưu project.clj và được thực hiện lại lein depslein uberjar. Tôi đã có thể tạo ra một jarfile thành công, vì vậy tôi tin rằng tôi đang thêm thư viện một cách chính xác.

Tôi không thể nghĩ ra một lý do khác tại sao hành động bao gồm sự phụ thuộc khác sẽ ngăn cản tôi tạo ra jarfile. Nếu bạn có thể nghĩ về điều gì đó tôi nên kiểm tra dựa trên thông tin tôi cung cấp, nó sẽ giúp tôi rất nhiều. Cảm ơn bạn!

Trả lời

4

Dường như thư viện được tham chiếu tùy thuộc vào Clojure 1.7.0, nhưng bạn đang tham chiếu rõ ràng phiên bản 1.6.0.

Hãy thử thay đổi:

[org.clojure/clojure "1.6.0"] 

tới:

[org.clojure/clojure "1.7.0"] 

Ngoài ra, bạn có thể tham khảo một phiên bản cũ của thư viện mà không phụ thuộc vào Clojure 1.7.0, như: [uap-clj "1.0.1"]

+0

Cảm ơn bạn! Điều này hoàn toàn hoạt động! Bây giờ tôi biết luôn luôn kiểm tra phiên bản. –

Các vấn đề liên quan