我正在尝试第二天的clojure,我几乎什么都不懂。我正在使用Programming Clojure 2nd ed。我被困在图书馆里。
我有Leiningen并且正在运行REPL。本书首先告诉读者运行一个简单的
(require 'clojure.java.io)
工作正常(我得到一个零)。然后它想通过运行另一个简单的
来加载一个名为introduction.clj的文件(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文件,看看我应该放在哪里。错误和书说该命令将在我的类路径中搜索,但我不知道在哪里或那是什么(在搜索和阅读1小时后我仍然没有得到它,对不起)。我运行了一些命令,列出了许多类路径(其中没有包含clojure / java / io.clj)。
所以我尝试了另一种方法 - 在我的磁盘上找到io.clj文件,只需将文件复制到那里并使用命令运行它
(require 'clojure.java.introduction)
这似乎也不起作用。顺便说一句,我找到的io.clj文件位于“C:\ Program Files \ clojure \ src \ clj \ clojure \ java”中。我尝试从java文件夹中运行其他几个.clj文件以及clojure文件夹,比如javadoc.clj或inspector.clj,所有这些文件似乎都可以正常使用上面提到的命令。只有新文件似乎不会以这种方式加载。
任何帮助表示赞赏:)
答案 0 :(得分:6)
Clojure在Java虚拟机上运行,因此您需要了解一些有关PATH和CLASSPATH概念的知识:
请参阅:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html
关于错误消息,Clojure运行时期望在introduction.clj
目录中找到clojure\java\example\introduction.clj
(而不是它应该在哪里 - 见下文)。
Clojure名称空间的约定是最后一个组件是文件名,而以前的任何组件都是父目录。所以
clojure.java.introduction
必须位于目录中(相对于源“root”或类路径)
clojure\java\introduction.clj
(lein REPL会自动将您的源根添加到类路径中。)
您需要了解的另一个概念是源代码的“根”所在的位置。对于Leiningen(您正在使用的构建工具),默认值为“src”或“src / main / clojure” - 如Leiningen sample project file on GitHub中所述。)
最后,如果你真的陷入困境,那么这本书似乎是完整的项目is available on GitHub。
查看该项目,我发现您应该将文件放在src\examples\introduction.clj
答案 1 :(得分:1)
您是否正在阅读“编程Clojure”一书?
我遇到了同样的问题。它禁止如下:
java -cp d:\ backup \ clojure-1.5.1 \ clojure-1.5.1.jar; d:\ study \ clojure \ shcloj-code \ code clojure.main -r
如果您在linux中工作,请替换“;”用“:”
lein repl
您还应该删除文件夹D:\ study \ clojure \ shcloj-code \ code中的user.clj文件。