无法加载新的clojure库

时间:2012-09-21 14:02:50

标签: clojure classpath require leiningen

我正在尝试第二天的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,所有这些文件似乎都可以正常使用上面提到的命令。只有新文件似乎不会以这种方式加载。

任何帮助表示赞赏:)

2 个答案:

答案 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”一书?

我遇到了同样的问题。它禁止如下:

  1. 如果你用java开始clojure: 我在windows中工作,clojure.jar放在D:\ backup \ clojure-1.5.1中,“Programming Clojure”一书的源代码放在D:\ study \ clojure \ shcloj-code \ code中。您应该首先删除文件夹D:\ study \ clojure \ shcloj-code \ code中的user.clj文件。
  2. java -cp d:\ backup \ clojure-1.5.1 \ clojure-1.5.1.jar; d:\ study \ clojure \ shcloj-code \ code clojure.main -r

    如果您在linux中工作,请替换“;”用“:”

    1. 如果你通过lein开始clojure 你应该首先cd到D:\ study \ clojure \ shcloj-code \ code文件夹,然后
    2. lein repl

      您还应该删除文件夹D:\ study \ clojure \ shcloj-code \ code中的user.clj文件。