2012-11-25 20 views
5

Nếu tôi tạo một dự án clojure mới với leiningen, nó làm cho một cây thư mục như sau:Tại sao leiningen thực hiện phân cấp thư mục? Tôi có thể phân chia nó không?

. 
|-- doc 
| `-- intro.md 
|-- project.clj 
|-- README.md 
|-- src 
| `-- hello_friend 
|  `-- core.clj 
`-- test 
    `-- hello_friend 
     `-- core_test.clj 

Thông thường, tất cả tôi muốn là một tập tin clojure duy nhất, và tôi muốn sử dụng leiningen để xử lý các thư viện và bắt đầu một repl.

Tôi đã có hai câu hỏi:

(1) Có thể để có được leiningen để hoạt động đúng với cấu trúc này

. 
|-- project.clj 
`-- hello.clj 

mà tôi muốn rất thích. (Trong thực tế, tốt hơn là để có project.clj như một phần của tập tin hello.clj)

(2) Có lý do chính đáng nào cho cấu trúc thư mục sâu không? Hay nó chỉ là một thói quen từ đất java?


Lưu ý, điều này hoạt động tốt như xa như tôi có thể thấy:

project.clj

(defproject generic "0.0.0" 
    :dependencies 
    [[org.clojure/clojure "1.4.0"] 
    [hiccup "1.0.2"]] 
    :source-paths ["."] 
    :main two 

    :repl-options { :port 4001 :init (println "(-main) to run") } 
) 

one.clj

(ns one 
    (:use hiccup.core)) 

(def doom (html [:h1 "doom"])) 

hai. clj

(ns two 
    (:require one)) 

(defn -main [] 
    (println one/doom)) 

Trả lời

5

(1) Bạn có thể chỉ định :source-paths ["."] trong project.clj của mình. Xem lein sample project để biết tất cả các tùy chọn có thể

(2) Bạn cần cấu trúc "sâu" khi bạn có 2 không gian tên và một tên khác là require s. Xem here để có giải thích về cách các không gian tên được ánh xạ tới các tệp.

+0

(1) thật tuyệt vời, cảm ơn bạn. nhưng xem ở trên cho (2). Có vẻ như nó hoạt động tốt. –

+0

@JohnLawrenceAspden, Hãy thử ví dụ của bạn với một không gian tên sâu hơn. Ví dụ: thay đổi 'one' thành' foo.one'. Ngay bây giờ không gian tên đề cập đến tên tệp, tên miền sâu hơn cũng đề cập đến các thư mục. – Jeremy

+0

@JeremyHeiler nó hoạt động tốt nếu tôi làm. –

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