2009-11-25 69 views
3

我正在通過編程Clojure和我最近從書籍官方網站下載代碼。對於其他可以使用的utils,例如(require 'clojure.contrib.str-utils),它可以工作。但是,我如何從書中加載代碼? (require 'examples.introduction)拋出以下異常:設置類路徑和從書中訪問代碼:編程Clojure

java.io.FileNotFoundException: Could not locate examples/ introduction__init.class or examples/introduction.clj on classpath: 
(NO_SOURCE_FILE:0) 
    [Thrown class clojure.lang.Compiler$CompilerException] 

Here is the full backtrace: 

Backtrace: 
    0: clojure.lang.Compiler.eval(Compiler.java:4543) 
    1: clojure.core$eval__3990.invoke(core.clj:1728) 
    2: swank.commands.basic$eval_region__686.invoke(basic.clj:36) 
    3: swank.commands.basic$listener_eval__695.invoke(basic.clj:50) 
    4: clojure.lang.Var.invoke(Var.java:346) 
    5: user$eval__1200.invoke(NO_SOURCE_FILE) 
    6: clojure.lang.Compiler.eval(Compiler.java:4532) 
    7: clojure.core$eval__3990.invoke(core.clj:1728) 
    8: swank.core$eval_in_emacs_package__307.invoke(core.clj:55) 
    9: swank.core$eval_for_emacs__384.invoke(core.clj:123) 
10: clojure.lang.Var.invoke(Var.java:354) 
11: clojure.lang.AFn.applyToHelper(AFn.java:179) 
12: clojure.lang.Var.applyTo(Var.java:463) 
13: clojure.core$apply__3243.doInvoke(core.clj:390) 
14: clojure.lang.RestFn.invoke(RestFn.java:428) 
15: swank.core$eval_from_control__310.invoke(core.clj:62) 
16: swank.core$eval_loop__313.invoke(core.clj:67) 
17: swank.core$spawn_repl_thread__445$fn__476$fn__478.invoke(core.clj: 
173) 
18: clojure.lang.AFn.applyToHelper(AFn.java:171) 
19: clojure.lang.AFn.applyTo(AFn.java:164) 
20: clojure.core$apply__3243.doInvoke(core.clj:390) 
21: clojure.lang.RestFn.invoke(RestFn.java:428) 
22: swank.core$spawn_repl_thread__445$fn__476.doInvoke(core.clj:170) 
23: clojure.lang.RestFn.invoke(RestFn.java:402) 
24: clojure.lang.AFn.run(AFn.java:37) 
25: java.lang.Thread.run(Unknown Source) 

我試圖在Windows XP上的NetBeans都Clojure的方塊和Enclojure。 它是一個類路徑問題?我應該在哪裏放置包含書中代碼的文件夾?請幫助我與我的變量環境設置。

+0

我建議你也添加一個Java標籤。 –

回答

3

本書建議您使用bin目錄中的腳本。 repl.shrepl.bat,如果你閱讀它們,會告訴你你需要把什麼東西放在你的類路徑上,以便一切工作。如果您在爲Clojure設置類路徑時遇到困難,或者無法理解路徑結構如何與名稱空間名稱結構相對應,那麼在解釋這個問題時有很多關於SO的問題;例如看到我的回答here。 (如何告訴Java使用的類路徑將取決於你如何啓動它,看看它在文檔中的NetBeans的,如果你需要的基本知識。)

總之,我建議您採取的類路徑從repl.sh/repl.bat並通過您選擇的方法啓動REPL時使用。或者只是使用適當的腳本啓動REPL(這將是您的案例中的.bat版本。)

最後,只要您相應地設置類路徑,放置代碼的位置並不重要。

2

我正在使用NetBeans上的Enclojure編程Clojure。爲了使用Enclojure的REPL,我只是將本書的代碼中的JAR文件導入到我的Clojure項目中。這包括

  1. 所有JAR在lib/ 目錄用的 jline-0.9.94.jar
  2. 我創建通過含有examples/目錄 及其內容(PCexamples.jar下圖中)的手的JAR文件
  3. 例外文件

Libraries folder in NetBeans