当您创建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),这也可能会感兴趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top