1

这是我尝试过的示例目标。事实证明,它想删除所有内容,因为逗号分隔“ * */*”和“cover”——可以理解。

<target name="clean">
    <delete
        verbose="true">
        <fileset dir="." includes="**/*.pyo"></fileset>
        <fileset dir="." includes="**/*,cover"></fileset>
    </delete>
</target>

如何指定嵌入式逗号?

我正在尝试学习 Ant,这样我就不必为不同的操作系统维护不同的构建系统。在本例中,它位于 Python 环境中,其中 *,cover 文件由名为Coverage的代码覆盖检查工具创建。

4

2 回答 2

1

你不需要逃避这个。只需使用<include/>而不是includesarg。试试这个:

<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/>像我的例子一样使用)。如果您将使用.,那么您将遇到嵌套构建的问题。让我们想象一下,您有两个删除文件的构建,但第一个构建也调用第二个构建:

主目录/build1.xml

<delete dir="." includes="**/*.txt" />
<!-- call clean target from build2.xml -->
<ant file="./subdir/build2.xml" target="clean"/>

主目录/子目录/build2.xml

<delete dir="." includes="**/*.txt" />

在这种情况下,build2.xml 不会删除 subdir 中的 *.txt 文件,而是删除 maindir 中的 *.txt 文件,因为 ant 属性将被传递给 build2.xml。当然你可以用它inheritAll="false"来省略它,但根据我的经验,我知道.在路径中使用会给你带来很多问题。

于 2013-03-14T21:01:45.183 回答
0

除非您不想删除其他名称以 cover 结尾的文件,否则请忽略逗号:

<fileset dir="." includes="**/*cover"></fileset>

如果您确实有其他不想删除的以封面结尾的文件,请尝试使用 MattDMo 评论中的反斜杠建议。您可能需要使用双反斜杠(“ **/*\\,cover”)。

另一种可能性:您可以将 Coverage 配置为将其输出放在另一个目录中,这样您就可以删除整个目录吗?或者您可以将其配置为使用不同的输出文件名,这样您就不会遇到这个问题?我不熟悉 Coverage,但查看您提供的链接,看起来 data_file 选项可能会执行其中一项或两项操作。

于 2013-03-14T20:48:10.503 回答