![Apache Ant 能否在文件集上完全运行任务而不会在第一次失败时停止?](https://linux22.com/image/1473740/Apache%20Ant%20%E8%83%BD%E5%90%A6%E5%9C%A8%E6%96%87%E4%BB%B6%E9%9B%86%E4%B8%8A%E5%AE%8C%E5%85%A8%E8%BF%90%E8%A1%8C%E4%BB%BB%E5%8A%A1%E8%80%8C%E4%B8%8D%E4%BC%9A%E5%9C%A8%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%A4%B1%E8%B4%A5%E6%97%B6%E5%81%9C%E6%AD%A2%EF%BC%9F.png)
我在 ant 中设置了一个目标,它对自上次检查以来所有修改的文件运行 PHP lint 检查。
<target
name="lint"
unless="lint.done">
<apply executable="php" taskname="lint" failonerror="true">
<arg value="-l">
<fileset dir="...">
<include name="**/*.php">
<modified/>
</fileset>
</apply>
</target>
不幸的是,如果由于单个文件未通过 lint 检查而导致此操作失败,则所有其他文件将不会进行 lint 检查,但仍将存储在修改后的缓存中。导致失败的文件也将被缓存,modified
这意味着下次运行时,检查将通过,即使没有进行任何更改来解决 lint 检查失败的原因。
最后,如果确实发生了 lint 错误,构建应该会失败。困难的部分是尝试让它失败,而不是在 lint 完成之前停止。
解决方案如下:
- 如果检查失败,则不要更新修改后的缓存。
- 如果一个文件的检查失败,则继续对其他文件进行 lint 检查,但仍将构建标记为失败。
这两种解决方案都可以实现吗?
对于第一点,我知道您可以传递一个参数来modified
停止缓存更新。然后,您可以modified
在 lint 检查后调用第二个,以便在检查成功时仅缓存文件吗?
对于第二点,我能想到的主要方法是不要因 lint 错误而失败,而是将 lint 结果传递到一个脚本中,该脚本会根据需要一次检查并输出所有失败的文件。