在Ant中,如何在文件名中指定带逗号的文件?

时间:2013-03-14 20:25:41

标签: java python ant fileset coverage.py

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

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

如何指定嵌入式逗号?

我正在尝试学习Ant,因此我不必为不同的操作系统维护不同的构建系统。在这种情况下,它位于Python环境中,其中*,封面文件由名为Coverage的代码覆盖率检查工具创建。

2 个答案:

答案 0 :(得分:1)

你不需要逃避这一点。只需使用<include/>代替includes arg。试试这个:

<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不会删除子目录中的* .txt文件,而是删除maindir中的* .txt文件,因为ant属性将传递给build2.xml。当然你可以使用inheritAll="false"来省略这一点,但根据我的经验,我知道在路径中使用.会给你带来很多问题。

答案 1 :(得分:0)

除非你有其他文件的名称以封面结尾,你不想删除,只需留下逗号:

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

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

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