2013-03-11 28 views
7

Tôi mới sử dụng Clojure và tôi hoàn toàn không hiểu cách viết project.clj của mình để nó hoạt động cho cả lein repllein run. Dưới đây là (toàn bộ đường dẫn: ~/my-project/project.clj):Làm thế nào để xác định project.clj cho cả lein run và lein repl làm việc?

(defproject my-project "1.0.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :dependencies [[org.clojure/clojure "1.3.0"]] 
    :main my-project.core/hello 
) 

Sau đó, tôi có ~/my-project/src/my_project/core.clj tập tin của tôi

(ns my-project.core) 

(defn hello [] 
    (println "Hello world!") 
) 

lein run tác phẩm tốt nhưng tôi nhận được một FileNotFoundException khi chạy lein repl:

~/my-project$ lein run 
Hello world! 
~/my-project$ lein repl 
REPL started; server listening on localhost port 42144 
FileNotFoundException Could not locate hello__init.class or hello.clj on classpath: clojure.lang.RT.load (RT.java:430) 
clojure.core=> 

Tôi nên chỉnh sửa số project.clj để giải quyết vấn đề này như thế nào? Hoặc tôi có phải gọi số lein repl theo cách khác không?

Xin cảm ơn trước.

EDIT: thử với lein dep s và lein compile, nhưng vẫn còn những lỗi tương tự

~/my-project$ lein version 
Leiningen 1.7.1 on Java 1.6.0_27 OpenJDK Client VM 
~/my-project$ lein deps 
Copying 1 file to /home/yasin/Programming/Clojure/my-project/lib 
~/my-project$ lein compile 
No namespaces to :aot compile listed in project.clj. 
~/my-project$ lein repl 
REPL started; server listening on localhost port 41945 
FileNotFoundException Could not locate hello__init.class or hello.clj on classpath: clojure.lang.RT.load (RT.java:430) 
+0

Có vẻ như bạn đang sử dụng lein 1, phải không? (Bạn có thể kiểm tra bằng 'lein version'). Trong trường hợp này, tôi nghĩ bạn nên chạy 'lein deps' và' lein compile' rồi thử 'lein repl'. – ivant

+0

Cảm ơn, nhưng vẫn không đi ... Tôi đã chỉnh sửa câu hỏi với nhiều chi tiết hơn. – m0skit0

+0

@ m0skit0 Nếu bạn mới sử dụng clojure, hãy sử dụng lein2. Không nên có lý do để sử dụng lein 1.7 vào thời điểm này, đặc biệt là nếu bạn chỉ mới bắt đầu. – Cubic

Trả lời

13

Một điều bạn có thể làm để làm cho nó làm việc sẽ được thay đổi core.clj tới:

(ns my-project.core 
    (:gen-class)) 

(defn hello [] 
    (println "Hello world!")) 

(defn -main [] 
    (hello)) 

Và chỉnh sửa project.clj tới:

(defproject my-project "1.0.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :dependencies [[org.clojure/clojure "1.3.0"]] 
    :main my-project.core) 

(:gen-class) sẽ yêu cầu trình biên dịch tạo một lớp Java cho không gian tên và chỉ thị :main trong project.clj sẽ báo cho lein run chạy phương thức chính trên lớp, được cung cấp bởi -main. Tại sao lein repl không tìm thấy my-project.core/hello là không rõ ràng với tôi, nhưng tôi không biết nhiều về leiningen internals.

+0

Tôi sẽ thử nhưng 'lein run' hoạt động tốt như tôi đã nói ở trên. – m0skit0

+0

Nó hoạt động. Tôi chỉ phải định nghĩa một hàm '-main' để nó hoạt động và thay đổi: main thành': main-project.core' như bạn đề nghị. Btw bạn quên một dấu ngoặc đơn ở phần cuối của 'core.clj', tôi đã sửa nó :) – m0skit0

+0

tại sao leiningen lại cần cái chính trong một cái bình, để bắn lên một repl thực sự? – matanster

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