2012-09-21 20 views
9

我在第二天嘗試clojure,但我幾乎什麼都不明白。我正在編程Clojure第二版。我被圖書館困住了。無法加載新的clojure庫

我有Leiningen並且正在運行REPL。本書首先告訴讀者運行一個簡單的

(require 'clojure.java.io) 

它工作得很好(我得到一個零)。然後,它希望通過運行另一個簡單

(require 'examples.introduction) 

在那裏我得到一個錯誤信息

FileNotFoundException Could not locate clojure/java/introduction__init.class 
or clojure/java/introduction.clj on classpath: clojure.lang.RT.load (RT.java:432) 

我下載的文件introduction.clj看着我應該在哪裏把它加載一個名爲introduction.clj文件。這個錯誤和這本書說,這個命令會在我的類路徑中搜索,但我不知道在哪裏或什麼是什麼(在搜索和閱讀1小時後我仍然沒有得到它,對不起)。我運行了一些命令,並列出了很多類路徑(其中沒有包含clojure/java/io.clj)。

所以,我想另一種方法 - 尋找我的磁盤上的文件io.clj,只需將文件複製一份,並運行它用命令

(require 'clojure.java.introduction) 

這似乎沒有任何工作。順便說一下,我發現的io.clj文件位於「C:\ Program Files \ clojure \ src \ clj \ clojure \ java」中。我嘗試從java文件夾以及clojure文件夾運行其他幾個.clj文件,例如javadoc.clj或者inspector.clj,並且似乎都可以在上述命令中正常工作。只有新文件似乎不會以這種方式加載。

任何幫助表示讚賞:)

+0

這是什麼example.introduction?一個jar或rajcl文件? – ssedano

回答

6

Clojure的運行在Java虛擬機,所以你需要學習一些關於PATH和CLASSPATH概念:

參見:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

關於錯誤信息,Clojure運行時期望在目錄clojure\java\example\introduction.clj中找到introduction.clj(不是它真的應該在哪裏 - 見下文)。

Clojure命名空間的約定是最後一個組件是文件名,而任何以前的組件都是父目錄。所以

clojure.java.introduction 

必須在目錄(相對於源「根」或類路徑)

clojure\java\introduction.clj 

(雷音REPL自動添加源根到classpath)。

您需要了解的另一個概念是源代碼的「根」位於何處。對於Leiningen(您正在使用的構建工具),缺省值爲「src」或「src/main/clojure」 - 如Leiningen sample project file on GitHub中所述)。

最後,如果你真的陷入困境,看起來這本書的完整項目is available on GitHub。在項目

看,我看到你實際上應該將文件放置src\examples\introduction.clj

+0

感謝您的回覆,我閱讀了有關路徑和類路徑的文檔,並且有所幫助。但問題仍然存在。我試着把文件放在clojure的主文件夾(和子文件夾)中的任何地方,它根本不起作用。 ''examples.introduction'不起作用,''clojure.examples.introduction'不起作用,簡而言之我不覺得這是個問題。每個其他的clj文件都從文件夾正確加載,但是當我將introduction.clj文件放在那裏時,它無法找到它。無處不在。那有什麼其他原因嗎?我真的不知道該怎麼做。謝謝 – xificurC

+1

你還需要'(ns examples.introduction)'在clj文件的頂部。文件中的名稱空間通常需要與文件系統中的位置相匹配。除非你事先將clojure源代碼編譯成一個Java類並將其打包成一個jar包(你可以稍後獲取)。 – noahlz

+0

即使這沒有幫助。我甚至試過把introduction.clj文件放到io.clj文件所在的同一個文件夾中。那個可以使用命令'(require'clojure.java.io)',它的第一行說'ns clojure.java.io'。所以我將introduction.clj文件的第一行改爲'ns clojure.java.introduction'。我的意思是應該工作,對吧?那麼,即使那樣也不行。相同的文件夾,相同的路徑,但它不起作用。儘管Leiningen應該處理所有事情,但我開始認爲我沒有安裝任何東西,不是嗎? – xificurC

0

下你讀的書「編程Clojure的」?

我遇到了同樣的問題。

  1. 如果您在Java啓動的Clojure: 我工作在Windows中,clojure.jar被放置在d:這禁令如下sovled \備份\ Clojure的-1.5.1,和的源代碼書「編程Clojure」被放置在D:\ study \ clojure \ shcloj-code \ code中。您應該先刪除文件夾D:\ study \ clojure \ shcloj-code \ code中的user.clj文件。

的java -cp d:\備份\ Clojure的-1.5.1 \的Clojure-1.5.1.jar; d:\研究\ Clojure的\ shcloj碼\代碼clojure.main -r

如果你在linux下工作,替換「;」用 「:」

  1. 如果你開始通過雷音 的Clojure你應該先cd到d:\學習\ Clojure的\ shcloj代碼\代碼文件夾,然後

雷音REPL

您還應該刪除文件夾D:\ study \ clojure \ shcloj-code \ code中的user.clj文件。