我需要将一些clojure文件编译成java字节码文件,将它们存储在磁盘上,以便稍后可以加载/执行它们。是否可以将一串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代码到类文件?
好奇:为什么你需要将Clojure代码编译成类文件? AOT编译增加了很多复杂性,通常在运行时从.clj文件编译/加载Clojure代码更容易。听起来有点像我的“XY问题”... – mikera
@mikera - 我有一个程序,它将clojure文件作为配置文件。我已经知道如何评估代码,但是这需要初始化clojure运行时间,这需要大约1秒钟 - 我希望通过仅在更改时编译配置来解决此问题,并且如果未更改,只需加载并执行预编译的类文件。 – Rogach
然后,这个问题的答案不会帮助你....加载和初始化'clojure.core'几乎可以肯定是什么原因导致启动时间,而不是加载和编译你的配置文件。 – mikera