我的ant项目生成一个"output"文件夹,其中包含多次运行的输出,我想将它们与位于"预期"文件夹中的文件进行比较(这些最后的文件名与输出文件夹中的文件名完全相同)。我试过了:
<apply executable="diff">
<fileset dir="${output.dir}" />
<arg value="-u" />
<srcfile />
<arg value="${expected.dir}/" />
<srcfile />
<redirector>
<outputmapper type="merge" to="result.out" />
</redirector>
</apply>
但是我有两个问题:
首先,我不允许在一个<apply>
中放置两个<srclist />
,那么我如何在一个<apply>
中使用两倍的当前文件名称呢?
第二,我不能在一个文件中得到我的<apply>
的输出。我尝试了不同的方法(将output
参数放在<apply>
标签中…),但它似乎总是只存储应用程序的最后执行。如何将每个diff的结果附加到一个文件中?
并且我不想要安装任何其他的东西(所以不使用foreach的ant-contrib)。
谢谢。
这个适合我:
<delete file="result.out" />
<apply executable="diff" force="yes" output="result.out" append="true">
<fileset dir="${output.dir}" />
<srcfile />
<targetfile />
<mapper type="glob" from="*" to="${expected.dir}/*" />
</apply>
一些解释:-
apply
任务targetfile
元素允许您指定第二个参数,该参数通过映射器从srcfile
派生。 - 要获得合并输出,使用
output
属性并将append
设置为true。请注意,您可能需要删除输出文件(即截断它),否则在重新运行时,您将无法获得一个干净的石板。 - 我摆弄了diff的arg列表以适应我的操作系统,而不是将
expected.dir
和目标文件作为连续的元素传递,映射器将它们合并为diff的"右手"文件的单个完整路径。