3

我需要将一些 clojure 文件编译成 java 字节码文件,将它们存储在磁盘上,以便以后能够加载/执行它们。

我尝试了以下方法:

RT.load("clojure/core");
RT.init();
String clazz = "(ns org.rogach.avalanche.build (:gen-class)) (defn -doStuff [] (println 1))";
Compiler.load(new StringReader(clazz));
Compiler.load(new StringReader("(compile 'org.rogach.avalanche.build)"));

但它失败了:

Exception in thread "main" java.io.FileNotFoundException: 
Could not locate org/rogach/avalanche/build__init.class or org/rogach/avalanche/build.clj on classpath

公平地说,如果我直接从 clojure REPL 执行该代码,就会发生完全相同的事情。

此外,这种方法不允许我为类文件指定输出目录,这也很重要。

如何将该 clojure 代码编译为类文件?

4

2 回答 2

2

我强烈怀疑答案是:不是直接的。

AOT编译的单位是namespace,compile函数好像是在文件中寻找namespace。我认为有必要将 Clojure 文件写入正确的相对路径,以便编译函数可以找到适当的命名空间。

于 2013-06-21T20:05:19.687 回答
0

查看Nakkaya 的使用 clojure 以编程方式编译 java 代码。我过去曾使用过它,并且是对如何将其扩展到接口发表评论的人。我不确定您的用例,但这符合您的要求。

于 2014-03-07T00:19:49.790 回答