Clojure加载文件

时间:2010-05-26 14:38:39

标签: 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/目录和两个jar。我也尝试将project/目录放在类路径中,但没有运气。

如何设置一个简单的clojure项目?

2 个答案:

答案 0 :(得分: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可以找到你所有文件的那一点。)

答案 1 :(得分: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中的所有细节,所以请阅读它(如果我错过了某些内容,请留下评论)。 : - )

  4. Leiningen将负责基本的项目布局并为您设置REPL / swank / nailgun的类路径(如果您还没有遇到后两者,您很快就会 - 但这是一个单独的主题,我已经覆盖了一定程度的swank部分,例如in this SO answer),所以希望你永远不需要手工处理java -cp ...废话。 (我在上一个括号内注释中与swank相关的答案详细说明了如何使用Emacs中的正确类路径设置swank。)