仅在修改时编译* .clj源(使用`clojure.core.Compile`)

时间:2013-10-14 23:28:58

标签: clojure

我正在使用建议的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文件,即使它们没有改变。有什么方法吗?

2 个答案:

答案 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>