该代码使用Groovy ANT task做到以下几点:
- 实现自定义常规选择,选择基于一个MD5校验和检查要处理的XML文件。
- 调用xmllint上的每个文件并存储它的成功完成后,校验和(除非该文件的内容被改变这防止xmllint的重新执行
例:
<project name="demo" default="xmllint">
<!--
======================
Groovy task dependency
======================
-->
<path id="build.path">
<pathelement location="jars/groovy-all-1.8.6.jar"/>
</path>
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
<!--
==============================================
Select files to be processed
MD5 checksums located in "checksums" directory
==============================================
-->
<target name="select-files">
<fileset id="unprocessedfiles" dir=".">
<include name="*.xml"/>
<exclude name="build.xml"/>
<scriptselector language="groovy" classpathref="build.path">
def ant = new AntBuilder()
ant.checksum(file:filename, toDir:"checksums", verifyProperty:"isMD5ok")
self.selected = (ant.project.properties.isMD5ok == "false") ? true : false
</scriptselector>
</fileset>
</target>
<!--
=============================================================
Process each file
Checksum is saved upon command success, prevents reprocessing
=============================================================
-->
<target name="xmllint" depends="select-files">
<groovy>
project.references.unprocessedfiles.each { file ->
ant.exec(executable:"xmllint", resultproperty:"cmdExit") {
arg(value:file)
}
if (properties.cmdExit == "0") {
ant.checksum(file:file.toString(), toDir:"checksums")
}
}
</groovy>
</target>
</project>
备注:
- 使用原始应用 ANT任务无法执行此复杂要求。一次调用xmllint命令可能会成功,而另一个可能会失败。
- 创建一个名为“校验和”的子目录以存储MD5校验和文件。
- Groovy的罐子从Maven Central
原来的答复
使用modified selector
<project name="demo" default="xmllint">
<target name="xmllint">
<apply executable="xmllint">
<srcfile/>
<fileset dir="." includes="*.xml">
<modified/>
</fileset>
</apply>
</target>
</project>
称为中的属性文件 “cache.properties” 将在创建的ANT下载构建目录。它记录文件摘要,用于确定自上次构建运行以来文件是否已更改。
问题是即使任务失败,构建也不会重新运行该文件。我需要避免仅在已通过构建的文件上重新运行。 – viebel 2012-02-12 14:08:17
这不是你问的。我唯一的建议是自定义选择器。除了文件摘要(用于表示文件更改)之外,还需要存储操作的结果。 – 2012-02-12 18:15:28
我已更新了该问题以使其更清晰。 Thx – viebel 2012-02-12 22:03:46