Ant复制空目录

时间:2011-02-19 21:14:09

标签: ant copy

我仍然是蚂蚁的新手,虽然我知道coldfusion,但我不太了解java约定,但我知道ant是使用java约定构建的。话虽这么说我正在开发一个将项目复制到临时文件夹的ant进程,更改项目中的一些代码,然后将临时目录推送到FTP。我试图从副本中排除我的所有git,eclipse和ant文件,这样我的测试平台就不会混乱。我设置了一个目标进行复制,但似乎Ant不仅忽略了我的排除(我确定我写错了),但它只是复制顶级目录和文件。没有递归副本。我目前的目标是:

<target name="moveToTemp" depends="init">
    <delete dir="./.ant/temp" />
    <mkdir dir="./.ant/temp" />
    <copy todir="./.ant/temp">
        <fileset dir=".">
            <include name="*" />
            <exclude name=".*/**" />
            <exclude name=".*" />
            <exclude name="build.xml" />
            <exclude name="settings.xml" />
            <exclude name="WEB-INF/**" />
        </fileset>
        <filterset>
            <filter token="set(environment='design')" value="set(environment='testing')" />
        </filterset>
    </copy>
</target>

我知道我不是在做我的排除权利,但我不知道我做错了什么。我看到Ant中一直使用双星号(**),但我无法弄清楚

2 个答案:

答案 0 :(得分:7)

默认情况下,Ant文件集将(递归地)包含指定目录下的所有文件,相当于:

<include name="**/*" />

这是隐含的包含。如果您提供包含,它将覆盖隐含的包含。

您的包含

<include name="*" />

表示'匹配文件集目录中的任何文件',但这会排除子目录的遍历,因此会出现问题。只复制文件和顶级目录。

请参阅Ant文档中的Patterns以获取基于目录的任务:**匹配任何目录树(零个或多个目录)。

对于您的情况,您应该能够简单地删除“包含”,以便隐含的“包括所有”适用。

建议您调查defaultexcludes task,它可以让您为整个项目设置一次这样的事情。

答案 1 :(得分:0)

回答问题的标题。您可以按如下方式包含空目录的副本。 (includeemptydirs 属性)

示例:

    <copy includeemptydirs="true" todir="${directory}${file.separator}sentinel_files">
        <fileset dir="${basedir}${file.separator}sentinel_files"/>
    </copy>

使用以下提供的文档:

https://ant.apache.org/manual/Tasks/copy.html