我正在使用建议的in this answer方法将Clojure *.clj
文件编译为*.class
(并随后将它们包围起来),或多或少使用compile-clojure
目标的结构来自在Clojure发行版的根目录中找到的build.xml
文件(例如在clojure-1.5.1.zip
中)。就我而言:
<java classname="clojure.lang.Compile"
failonerror="true"
fork="true">
<classpath refid="compile.classpath"/>
<sysproperty key="clojure.compile.path" value="${cljbuild.dir}"/>
<arg value="${project.MainClass.name}"/>
</java>
这种方法的问题在于它不断编译*.clj
文件,即使它们没有改变。有什么方法吗?
答案 0 :(得分:0)
为了构建Clojure项目,出于各种原因,我无法使用Leiningen,我更乐意使用Zi plugin并让maven决定需要重新编译的内容。
答案 1 :(得分:0)
我最终使用了ant-contrib的OutOfDate任务(例如,在this answer中也有描述,用于调用Ant的exec
任务的更一般情况)。
<contrib:outofdate>
<deletetargets all="true"/>
<sourcefiles>
<path refid="compile.dependency.artifacts"/>
</sourcefiles>
<targetfiles>
<fileset dir="${cljbuild.dir}">
<include name="**/*.class"/>
</fileset>
</targetfiles>
<sequential>
<java classname="clojure.lang.Compile"
failonerror="true"
fork="true">
<classpath refid="compile.classpath"/>
<sysproperty key="clojure.compile.path" value="${cljbuild.dir}"/>
<arg value="${project.MainClass.name}"/>
</java>
</sequential>
</contrib:outofdate>