我试图将clojure源代码编译成类文件,并仅使用命令行运行它,没有lein,也没有(可能)回复。
我在src/hello
目录中有core.clj。
.
└── src
└── hello
└── core.clj
这是源代码。
(ns hello.core)
(defn -main
"This should be pretty simple."
[]
(println "Hello, World!"))
(compile)
。从这个网站的提示(http://clojure.org/compilation)中,我试图从REPL获取类文件。
我在src目录中使用lein repl
启动了REPL,然后尝试编译以获取错误。
user=> (compile 'hello.core)
CompilerException java.io.IOException: No such file or directory, compiling:(hello/core.clj:1:1)
从这篇文章simple tool for compiling Clojure .clj into .class / .jar和How to compile file in clojure来看,似乎我可以在REPL之外编译clojure源代码。
我在.
尝试了此操作以获取错误。
> java -cp .:<PATH>/clojure-1.6.0.jar -Dclojure.compile.path=build clojure.lang.Compile src/hello/core.clj
Compiling src/hello/core.clj to build
Exception in thread "main" java.io.FileNotFoundException: Could not locate
hello/core/clj__init.class or hello/core/clj.clj on classpath:
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:411)
...
所以,这是我的问题:
java -cp .:CLOJURE_JAR main
是否足够? 答案 0 :(得分:2)
调用REPL时,应添加类路径。
java -cp .:<PATH>/clojure-1.6.0.jar:./src clojure.main
您需要将*compile-path*
设置为(set! *compile-path* "build")
。
然后你可以编译来获取类文件。
user=> (compile 'hello.core)
hello.core
有两个问题:
这是调用编译器。
clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./src -Dclojure.compile.path=build clojure.lang.Compile hello.core
Compiling hello.core to build
您应该指向类文件所在的目录。
clojure> java -cp .:<PATH>/clojure-1.6.0.jar:./build hello.core
Hello, World!