這是一個很好的用例爲outofdate
task從ant-contrib:
<outofdate>
<sourcefiles>
<fileset dir="${definitionFolder}" />
</sourcefiles>
<targetfiles>
<fileset dir="${generatedFolder}" />
</targetfiles>
<sequential>
<exec executable="${codeGenTool-path}">
<arg value="${definitionFolder}" />
<arg value="${generatedFolder}" />
</exec>
</sequential>
</outofdate>
這將檢查下definitionFolder
每個文件對下generatedFolder
每一個文件 - 你可能要更嚴格地限制文件集,例如與includes="**/*.def"
或任何相關的文件擴展名。
或者,如果您想避免「第三方」任務,那麼您可以使用dependset
任務來檢查目標文件與源文件。
<target name="generate" depends="check.generate, do.generate" />
<target name="check.generate">
<dependset>
<srcfileset dir="${definitionFolder}" />
<targetfileset dir="${generatedFolder}" />
</dependset>
<condition property="gen.required">
<resourcecount count="0" when="equal">
<fileset dir="${generatedFolder}" />
</resourcecount>
</condition>
</target>
<target name="do.generate" if="gen.required">
<exec ....>
</target>
的dependset
任務刪除所有如果其中任何比任何源文件的較舊的目標文件,所以我們可以do.generate
條件 - 如果有在generatedFolder
沒有文件就會運行,這種情況在以前從未運行過,或者生成的文件已過期。