这是我尝试过的一个示例目标。原来,它想删除所有内容,因为逗号分隔了"**/*"one_answers"cover"——可以理解。
<target name="clean">
<delete
verbose="true">
<fileset dir="." includes="**/*.pyo"></fileset>
<fileset dir="." includes="**/*,cover"></fileset>
</delete>
</target>
如何指定内嵌逗号?
我正在努力学习Ant,这样我就不必为不同的操作系统维护不同的构建系统。在这种情况下,它是在Python环境中,其中*,覆盖文件是由称为Coverage的代码覆盖检查工具创建的。
您不需要转义。用<include/>
代替includes
。试试这个:
<project name="test" default="clean">
<dirname property="build.dir" file="${ant.file.test}" />
<target name="clean">
<delete>
<fileset dir="${build.dir}/test">
<include name="**/*,*.xml" />
</fileset>
</delete>
</target>
</project>
顺便说一下。你不应该在你的dir
参数中使用.
(点)。如果你想删除目录中的文件,你有build.xml
文件,你应该传递绝对路径(要做到这一点,你可以使用<dirname/>
像我的例子)。如果你将使用.
,那么你将有嵌套构建的问题。让我们想象一下,您有两个构建,它们删除文件,但第一个构建也调用第二个构建:
maindir/build1.xml
<delete dir="." includes="**/*.txt" />
<!-- call clean target from build2.xml -->
<ant file="./subdir/build2.xml" target="clean"/>
maindir/子目录/build2.xml
<delete dir="." includes="**/*.txt" />
在这种情况下,build2.xml不会删除subdir中的*.txt文件,而是删除maindir中的*.txt文件,因为ant属性将被传递给build2.xml。当然,您可以使用inheritAll="false"
来省略这一点,但根据我的经验,我知道在路径中使用.
会给您带来很多问题。
除非您有其他文件名以cover结尾且不希望删除的文件,否则请省略逗号:
<fileset dir="." includes="**/*cover"></fileset>
如果您确实有其他文件以cover结尾,您不想删除,请尝试MattDMo评论中的反斜杠建议。你可能需要双反斜杠(" **/*\,cover
")。
另一种可能性:您是否可以配置Coverage将其输出放在另一个目录中,这样您就可以删除整个目录了?或者你可以配置它使用不同的输出文件名,这样你就不会有这个问题了?我不熟悉Coverage,但是看看您提供的链接,看起来data_file选项可能会做这些事情中的一件或两件。