我在这里感觉有点傻,但我不能让Clojure Hello World编译。编译Clojure?
目录结构:
hello-world/
clojure-1.1.0.jar
build/
classes/
src/
test/
hello.clj
hello.clj:
(ns test.hello
(:gen-class))
(defn -main [& args]
(println "Hello" (nth args 0)))
互动:
$ cd hello-world
[hello-world]$ java -cp ./clojure-1.1.0.jar:./build/classes:./src clojure.main
Clojure 1.1.0
user=> (require 'test.hello)
nil
user=> (test.hello/-main "there")
Hello there
nil
user=> (compile 'test.hello)
java.io.IOException: No such file or directory (hello.clj:2)
user=> *compile-path*
"classes"
user=> (doseq [p (.split (System/getProperty "java.class.path") ":")] (println p))
./clojure-1.1.0.jar
./build/classes
./src
nil
所以我可以加载并调用来自REPL文件,但它不”编译。
据clojure.org,编译需要
- 命名空间必须classpath中相对文件路径匹配 - 检查
- *编译路径*必须在类路径 - 检查
- :创一流的参数ns的形式 - 检查
我发现this post from a year back,据我可以告诉我做的完全一样,但它不起作用。
我错过了什么?
系统:OS X 10.6,Java的1.6.0,Clojure的1.1
看起来我不能接受我自己的答案,所以我必须离开问题,直到有人打开。 – 2010-06-26 11:29:43
这也是相关的注意到,你很少需要AOT编译Clojure代码。 Clojure代码在没有被编译的情况下运行得很好,这就是你应该运行它的方式。 一些特定的Clojure Java互操作特性实际上*要求*您的代码是AOT编译的,但是如果您没有使用这些特性,请不要麻烦编译您的代码。 如果你想要一个可执行的jar文件,你可以只用Amain函数编译一个主文件来运行应用程序。但是,http://www.assembla.com/spaces/clojure/tickets/315-add-support-for-running--main-namespace-from-clojure-main-without-aot – Rayne 2010-07-06 12:32:40