使用
我们的Java应用程序以前使用
到目前为止,我做到的最好的事情是说服
无论如何,我们实际的应用程序是基于RCP(Eclipse)的,这可能意味着在OSGI类加载器类路径方面还有更多要解决的问题。同时,我只是想知道直接使用
编辑:所以现在我已经让它生成所有的.class文件,但它需要各种未记录的初始化方法,这表明我认为
clojure.lang.Compiler.compile
从Java编译Clojure是否合法?我们的Java应用程序以前使用
clojure.lang.Compiler.load
在.clj源文件上创建Clojure对象实例,该文件具有proxy
宏。现在我们想使用gen-class
而不是proxy
来AOT编译这些对象。这样,.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.core/compile
:RT.var("clojure.core", "compile").invoke(...)
。从Java中获取变量并执行它们比尝试使用clojure的Java内部机制要少出错,也更不容易混淆。如果我没记错的话,这就是Datomic Java API的实现方式。 - Dave Ray