如何在Clojure中编译文件

12

我创建了一个名为“hello.clj”的文件

(ns clojure.examples.hello
    (:gen-class))
(defn -main [greetee] (println (str "Hello " greetee "!")))

并尝试编译:

clojurec hello.clj

但是我得到了这个错误:

Exception in thread "main" java.io.FileNotFoundException: Could not locate hello/clj__init.class or hello/clj.clj on classpath: 
    at clojure.lang.RT.load(RT.java:398)
    at clojure.lang.RT.load(RT.java:367)
    at clojure.core$load__5058$fn__5061.invoke(core.clj:3734)
    at clojure.core$load__5058.doInvoke(core.clj:3733)
    at clojure.lang.RestFn.invoke(RestFn.java:413)
    at clojure.core$load_one__5010.invoke(core.clj:3578)
    at clojure.core$compile__5065$fn__5067.invoke(core.clj:3744)
    at clojure.core$compile__5065.invoke(core.clj:3743)
    at clojure.lang.Var.invoke(Var.java:346)
    at clojure.lang.Compile.main(Compile.java:56)

我还尝试把这个放到文件中并运行clojure hello.clj

(compile 'clojure.examples.hello)

但是得到了相同的错误。


1
只是出于好奇,clojurec是什么?你从哪里得到的?我真的推荐使用Leiningen(详见我的答案)。它在Clojure社区中被广泛使用,您应该没有问题获得使用支持。 - Michał Marczyk
1
这是在Linux系统上的标准Clojure编译器,它是一个带有调用的shell脚本:exec java -cp /usr/share/java/clojure.jar:"$dest_dir$extra_classpath" -Dclojure.compile.path="$dest_dir" clojure.lang.Compile "$@"。 - jcubic
1个回答

6
一个名为clojure.examples.hello的命名空间需要存在于一个名为hello.clj的文件中,该文件位于目录$CPDIR/clojure/examples中,其中$CPDIR是包含在JVM类路径中的目录。
一般来说,手动设置类路径并发出编译命令没有多少意义。使用Leiningen代替;README中对你需要做的事情有相当详细的说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接