2009-10-14 4 views
17

Tôi có một dự án clojure sử dụng công cụ trò chơi 2d slick mà tôi đang cố gắng chạy dưới dạng tệp jar thực thi. Tôi đã tạo dự án trong cả Netbeans và Eclipse và tôi đã không may mắn xuất chúng vào một định dạng có thể thực thi được. Nó tiếp tục đưa ra lỗi không thể tìm thấy lớp chính, tiếp theo là cho lớp chính của tôi. Tôi đã thử chỉnh sửa tệp kê khai thay đổi tên với hy vọng rằng nó sẽ tìm thấy nó nhưng không có may mắn cho đến nay.Tạo tệp jar thực thi từ dự án clojure?

Nó chạy trong môi trường phát triển, nhưng không phải bên ngoài môi trường phát triển.

Trả lời

13

Đã một thời gian kể từ khi tôi đăng câu hỏi này và tôi nghĩ rằng tôi sẽ ghi lại những gì tôi đã tìm thấy từ bất kỳ ai cần câu hỏi này đã được trả lời.

Tôi hiện đang sử dụng Leiningen để quản lý dự án của mình mặc dù tôi đã bắt đầu phát xung quanh với cljr là trình quản lý gói và bổ sung bổ sung cho nó. Một trong hai cách này giúp đơn giản hơn để tạo tệp jar có thể chạy được.

Lấy Leiningen làm ví dụ thiết lập nó bằng cách sử dụng các hướng dẫn trên trang web và sau đó gọi lein new trong không gian làm việc của bạn. Điều này sẽ tạo một thư mục để chứa các dự án của bạn cũng như các thư mục con cho nguồn của bạn và kiểm tra tệp readme và tệp project.clj.

Chỉnh sửa dự án.clj với các phụ thuộc mà bạn sẽ sử dụng. Dev-dependencies là phụ thuộc mà bạn cần hoàn toàn cho sự phát triển như swank-clojure được hiển thị trong ví dụ bên dưới.

(defproject myproject "0.0.1-SNAPSHOT" 
    :description "My Personal Project." 
    :url "http://example.com/my-project" 
    :dependencies [[org.clojure/clojure "1.1.0"] 
       [org.clojure/clojure-contrib "1.1.0"] 
       [**other dependencies**]] 
    :dev-dependencies [[swank-clojure "1.2.1"]] 
    :main [org.myproject.core]) 

tôi thấy phô trương-clojure hữu ích như sau đó bạn có thể gõ lein swank để bắt đầu một trường hợp phô trương mà bạn có thể kết nối thông qua emacs.

: chính xác định không gian tên nào chứa hàm -main.

Gọi lein uberjar sẽ tạo một bình độc lập mà sau đó sẽ chạy.

Hy vọng rằng sẽ giúp bất kỳ ai gặp vấn đề của tôi!

+0

'Lỗi: Không tìm thấy hoặc tải lớp chính [prueba.core]'. Tôi đã bao gồm ': main' và giá trị tương ứng của nó, và tôi có một hàm' -main' được công khai trong không gian tên đó. Bất kỳ ý tưởng về những gì có thể sẽ sai? – m0skit0

+0

Hi @ m0skit0, đã lâu rồi tôi mới viết nó. Bạn đã cấu trúc các thư mục của mình một cách thích hợp chưa? Bởi vì tôi có nghĩa là 'project.clj' của bạn trong một thư mục chứa' src' chứa 'prueba' chứa' core.clj'? Bạn có sử dụng 'lein new ' và sau đó chỉnh sửa tệp 'core.clj' được tạo không? Nếu không, bạn có thể giải thích những gì bạn đã làm càng rõ ràng càng tốt? – toofarsideways

+0

Cấu trúc dự án là chính xác vì nó được tạo bởi Leiningen. Cuối cùng tôi đã làm cho nó hoạt động, bằng cách sử dụng cú pháp sau đây: main root.scriptlauncher: aot [root.scriptlauncher] 'cho' defproject'. – m0skit0

3

Tôi đã phải thêm clojure.jar và clojure-contrib.jar làm "phụ thuộc" vào dự án để làm cho nó được bao gồm trong bình. một khi tôi nhận được rằng tôi đã có thể chạy jar kết quả. Hãy nhớ rằng Netbeans có clojure.jar của riêng nó được sử dụng để chạy plugin của nó và nó không cần phải giống như clojure.jar mà chương trình của bạn sử dụng. Netbeans có một menu để thêm thư viện. Bạn sẽ cần phải thêm clojure [-contrib] .jar vào cả thư viện xây dựng và chạy

+0

Tôi đã thử thêm cả thời gian biên dịch và thư viện thời gian chạy vào dự án, nhưng không có may mắn cho đến nay. – toofarsideways