2010-05-26 48 views
10

我試圖建立一個簡單的Clojure項目,我不知道如何在項目之間加載文件。我確信答案是在文檔中,但我無法找到一個簡單的答案,我不知道在哪裏尋找。Clojure的加載文件

從本質上講,我的目錄是這樣的:

Clojure/ 
    clojure/ 
     clojure.jar 
     other clojure files 
    clojure-contrib/ 
     clojure-contrib.jar 
     other contrib files 
    project/ 
     main.clj 
     utils.clj 

而且我想main.clj是這樣的:

(ns project.main 
    (:require project.utils)) 
(greet) 

和utils.clj是這樣的:

(ns project.utils) 
(defn greet [] (println "Hello, World!")) 

但是失敗:

Exception in thread "main" java.io.FileNotFoundException: Could not locate project/utils__init.class or project/utils.clj on classpath: (main.clj:1) 

當我嘗試運行它。我的班級路徑包括頂部Clojure/目錄和兩個罐子。我也嘗試將project/目錄放在classpath中,但沒有運氣。

你如何建立一個簡單的Clojure項目?

回答

9

你沒有提到你的環境是什麼(例如Emacs/SLIME/Swank,vim/Vimclojure),所以我假定你正試圖從命令行調用它。

你需要讓你的Clojure/項目目錄中的類路徑:

java -cp path/to/clojure.jar:path/to/clojure-contrib.jar:path/to/Clojure ... 

確保檢查路徑是相對於當前的工作目錄是正確的。它需要指向您的命名空間的根(即,如果在Clojure/運行路徑是.)。

實際上,您的項目佈局適用於我的機器(tm),但我有use而不是require(但是如果您在Clojure可以找到所有時間點時遇到不同的錯誤你的文件)。

+0

謝謝。事實證明我的問題是因爲我在'project /'內運行,所以我需要在類路徑中添加'..'。現在正在工作。順便說一下,Vim \ VimClojure。 :) – So8res 2010-05-26 15:11:49

5

This answer我張貼另一個問題應該有希望給你的你的文件名應該如何與命名空間的東西的工作名稱的想法。然而,由於你的問題是「如何建立一個簡單的Clojure項目」,下面是一個更好的開始:

  1. 去GitHub搶Leiningen

  2. 按照自述文件中的說明。你最終會做類似

    $ lein new my-project 
    $ cd my-project 
    # ... edit project.clj ... 
    $ lein deps 
    
  3. 劈開!你需要把你的文件放在正確的地方。這意味着將您的源文件放在目錄樹根目錄my-project/src,您的核心命名空間最有可能位於my-project/src/my_project/core.clj。但是,真的,我已經解釋了the answer linked to above中的所有細節,所以請閱讀(如果我錯過了某些內容,請留下評論)。:-)

Leiningen會照顧基本項目佈局和爲您REPL /斯旺克/ nailgun設置CLASSPATH(如果你還沒有遇到後兩種,你很快就會 - - 但這是一個單獨的話題,我在某種程度上已經涉及了一些特殊的話題,例如in this SO answer),所以希望你永遠不需要親手處理java -cp ...廢話。 (我在最後一個小括號中提到的swank相關答案詳細介紹瞭如何在Emacs中使用正確的類路徑設置swank。)

+0

也許這對問題的作者很有用:http://alexott.net/en/clojure/ClojureLein.html - 與Leiningen合作的介紹 – 2010-05-26 16:10:13