在Ant中,如何在文件名中使用逗号指定文件



这是我尝试过的一个示例目标。原来,它想删除所有内容,因为逗号分隔了"**/*"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选项可能会做这些事情中的一件或两件。

相关内容

  • 没有找到相关文章

最新更新