0

我正在使用此答案中提出的方法将 Clojure*.clj文件编译为*.class(然后将它们 jar),或多或少地使用在 Clojure 分发的根目录中找到compile-clojure的文件中的目标结构(例如 in )。就我而言:build.xmlclojure-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即使文件没有更改,它也会继续编译文件。有什么办法解决这个问题吗?

4

2 回答 2

0

为了构建由于各种原因我无法使用 Leiningen 的 Clojure 项目,我更喜欢使用Zi 插件并让 maven 决定需要重新编译的内容。

于 2013-10-14T23:41:02.283 回答
0

我最终使用了 ant-contrib 的OutOfDate任务(例如,在这个答案中也描述了调用 Antexec任务的更一般情况)。

<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>
于 2013-10-15T14:52:22.493 回答