我需要将一些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代码编译为类文件?
发布于 2013-06-22 04:05:20
我强烈怀疑答案是:不是直接的。
AOT编译的单元是名称空间,而compile函数似乎是在文件中查找名称空间。我认为有必要将Clojure文件写入正确的相对路径,以便编译函数能够找到适当的名称空间。
发布于 2014-03-07 08:19:50
看看Nakkaya的Programmatically compiling java code using clojure吧。我在过去使用过它,并且是我对如何将它扩展到接口发表评论的人。我不确定您的用例,但这可以满足您的要求。
https://stackoverflow.com/questions/17240016
复制相似问题