是否可以从java将Clojure代码字符串编译成类?

是否可以从java将Clojure代码字符串编译成类?,java,clojure,compilation,Java,Clojure,Compilation,我需要将一些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

我需要将一些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代码编译成类文件?

我强烈怀疑答案是:不是直接编译

AOT编译的单位是名称空间,编译函数似乎在文件中查找名称空间。
我认为必须将Clojure文件写入正确的相对路径,这样编译函数才能找到合适的名称空间。

请看Nakkaya。我在过去使用过它,并且是对如何将它扩展到接口发表评论的人。我不确定您的用例,但这就是您要求的。

好奇:为什么需要将Clojure代码编译成类文件?AOT编译增加了很多复杂性,通常在运行时从.clj文件编译/加载Clojure代码更容易。听起来有点像“XY问题”…@mikera-我有一个程序,它将clojure文件作为配置文件。我已经知道如何评估代码,但这需要初始化clojure运行时,这需要约1秒的时间-我希望通过仅在配置发生更改时编译配置来解决这一问题,如果配置没有更改,只需加载并执行预编译的类文件。那么,对这个问题的回答对您没有帮助。。。。加载和初始化
clojure.core
几乎可以肯定是导致启动时间的原因,而不是加载和编译配置文件。因此,绝对没有办法在没有~1秒开销的情况下执行clojure代码?没有办法加快速度?Clojure的启动时间总是很长,直到有人修改编译器/引导代码。我现在推荐的解决方案(如果您关心延迟的话)是保持一个持久的JVM/REPL实例运行,这样启动时间就不成问题了?我不介意从clojure编译器复制一些代码,我只是不知道去哪里找。