我正在尝试设置一个简单的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项目?
答案 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项目”,以下是一个更好的开始:
转到GitHub并抓住Leiningen。
按照自述文件中的说明进行操作。你最终会做像
这样的事情$ lein new my-project
$ cd my-project
# ... edit project.clj ...
$ lein deps
哈哈!您需要将文件放在正确的位置。这意味着将源文件放在以my-project/src
为根的目录树中,您的核心命名空间最有可能位于my-project/src/my_project/core.clj
。但实际上,我已经解释了the answer linked to above中的所有细节,所以请阅读它(如果我错过了某些内容,请留下评论)。 : - )
Leiningen将负责基本的项目布局并为您设置REPL / swank / nailgun的类路径(如果您还没有遇到后两者,您很快就会 - 但这是一个单独的主题,我已经覆盖了一定程度的swank部分,例如in this SO answer),所以希望你永远不需要手工处理java -cp ...
废话。 (我在上一个括号内注释中与swank相关的答案详细说明了如何使用Emacs中的正确类路径设置swank。)