【发布时间】:2013-05-30 02:19:45
【问题描述】:
使用clojure.lang.Compiler.compile从Java编译Clojure是否合法?
我们的 Java 应用程序过去通过在具有 proxy 宏的 .clj 源上使用 clojure.lang.Compiler.load 来创建 Clojure 对象的实例。
现在我们想使用gen-class 而不是proxy 来编译这些对象。这样就可以移动 .class 文件,然后我们再实例化对象。
到目前为止,我所做的最好的事情是说服 clojure.lang.Compiler.compile 为我生成加载器类文件(“my/domain/lib__init.class”)。但我似乎没有获得随附的 .class 文件,命名空间中的每个函数(“my/domain/lib$fnname__1234.class”)和每个 gen-class 的存根类文件。这是使用http://clojure.org/compilation 的非常简单的第一个示例在沙盒中。我以为我已经正确设置了 compile-path,并将其设置为类路径中的某个内容,但那里可能仍然存在问题。
无论如何,我们的实际应用程序是基于 RCP (Eclipse) 的,这可能意味着它们将更多地根据 OSGI 类加载器类路径来计算。与此同时,我只是想知道直接使用clojure.lang.Compiler.compile 是否是一种有效的方法?
编辑:所以我现在已经让它生成了所有的 .class 文件,但它需要各种未记录的初始化,这向我表明 clojure.lang.Compiler 上的方法是内部的。我必须适当地设置 *compile-path* 并将 *compile-files* 设置为 true,例如
RT.var("clojure.core", "*compile-files*").bindRoot(true);
【问题讨论】:
标签: clojure