我的ant项目生成一个“输出”文件夹,其中包含多次运行的输出,我想将它们全部区分到位于“预期”文件夹中的文件(这些文件的名称与文件中的名称完全相同)导出目录)。我试过了:
<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>
但我有两个问题:
首先我不允许将两个<srclist />
放在一个<apply>
中,那么如何使用两次<apply>
中处理的当前文件的名称?
其次我无法在单个文件中获得<apply>
的输出。我尝试了不同的方法(将output
参数放在<apply>
标记中...)但它似乎总是只存储apply的最后一次执行。如何将每个差异的结果附加到一个文件中?
而且我不想安装其他任何东西(所以没有使用foreach的ant-contrib)。
感谢。
答案 0 :(得分:2)
这对我有用:
<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
task targetfile
元素允许您指定通过映射器从srcfile
派生的第二个arg。output
属性并将append
设置为true。请注意,您可能需要删除输出文件(即截断它),否则重新运行时您将无法获得清晰的文件。expected.dir
和目标文件作为连续元素传递,映射器将它们合并为一个完整的路径到“右手”文件中分差