我怎样才能尽量减少leiningen的AOT编译(Clojure的)
题
当您创建leiningen所有* .clj-文件编译AOT一个Clojure的项目。通常情况下,AOT编译是没有必要的,我想将其最小化。
这是我有必要提高验收的Clojure的作为Java为主的环境中补充。这是比较容易“卖”放在同一类文件作为胶水一对夫妇的打击有超过250 KB的类文件用奇怪的名字替代KB CLJ-文件和隐藏在他们之中一点点CLJ-文件(ISN “吨甚至阅读执行期间任何更多)。
理想情况下的“LEIN编译”的结果将是只有一个小的类文件,其中(与CLJ-文件和Clojure的库一起)实现所需的类的实例。
什么是实现这一目标的最简单的方法?我宁愿不写的Java(当然)的单行。
<强>更新反馈后从technomancy 强>
我不怀疑这是一个leiningen问题。让我来解释我是如何处理的例子之后。请原谅的例子的长度。我使用leiningen 1.3.1,但我认为1.4.0-SNAPSHOOT的工作方式。
$ lein new dummy
Created new project in: dummy
$ cd dummy
现在变化project.clj至(加入 “:主dummy.core”):
(defproject dummy "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]]
:main dummy.core)
和src /虚设/ core.clj为:
(ns dummy.core
(:gen-class))
(defn -main [& args]
(println "This is Clojure code, args=" args))
现在编译:
$ lein compile
Compiling dummy.core
这产生在以下文件中的类/虚设:
core.class
core__init.class
core$loading__4410__auto__.class
core$_main.class
这是正确的,我可以执行结果:
$ java -cp lib/*:classes dummy.core Hello
This is Clojure code, args= (Hello)
现在来了,我要什么有代替,但我做手工: 我可以通过删除以外的所有的 core.class 和复制的core.clj到的类/虚拟的哪些类文件现在看起来很空:
$ ls classes/dummy/
core.class
core.clj
在core.class包含代码在运行时加载的core.clj,结果仍然是相同的,我仍然可以这样做:
$ java -cp lib/*:classes dummy.core Hello
This is Clojure code, args= (Hello)
我还可以修改core.clj。(注:在类/虚拟的),以及不当然需要改变并重新编译
现在我的问题归结为:?是否有更简单的方式来获得眼前这个core.class 的
解决方案
Leiningen所做默认情况下没有AOT相当一段时间;也许你有一个旧版本?但有一个新的功能(1.4.0-SNAPSHOT),确保.class文件的jar创建之前由于创建传递AOT被删除,(见Clojure的assembla#322),这也可能会感兴趣。