Ant内置任务之copy

xiaoxiao2021-02-28  25

一、概述

        copy是Ant内置任务,用于将文件或资源集合拷贝到一个新的文件或者目录。默认情况下,只有源文件比目标文件更新或者目标文件不存在时才会拷贝,但是可以使用overwrite属性来覆盖文件。资源集合用于选择一组要拷贝的文件,使用资源集合时,必须设置todir属性。有一些资源返回绝对路径作为名字,比如file,使用它们但是不使用flatten属性或者内嵌mapper的话,得到的结果可能会与预期不一致。如果在复制操作中使用了过滤器,需要限制副本为文本文件。二进制文件会被复制操作损坏,无论通过filter隐式的定义过滤器还是显示的filterset都是如此。此外copy还支持filterchain元素,当filterchain与filterset同时出现时,所有的filterchain优先于filterset处理。

二、属性

        file:要拷贝的文件。

        preservelastmodified:是否将拷贝文件的最后修改时间设置为源文件的最后修改时间,默认为false。

        tofile:拷贝到的文件位置。

        todir:拷贝到的目录。

        overwrite:即使目标文件比源文件更新也会覆盖目标文件,默认为false。

        force:从Ant1.8.2起,即使目标文件是只读的也会覆盖文件,默认为fale。

        filtering:在进行拷贝时是否使用全局的构建文件过滤器。即使没有设置这个属性或者设置为false,使用嵌套的filterset时也会使用全局的构建文件过滤器。默认为false。

        flatten:是否忽略源文件的目录结构,将所有文件拷贝到todir属性指定的目录下。可以使用flatten mapper达到同样的效果。默认为false。

        includeEmptyDirs:是否拷贝fileset中的空目录。默认为true。

        failonerror:如果为false,当文件不存在或者指向一个目录嵌套的fileset不存在,或者拷贝发生异常时,会记录一个警告信息,但不会停止构建,默认为true。

        quiet:从Ant1.8.3起,如果failonerror属性设置为false,当文件不存在或者指向一个目录嵌套的fileset不存在,或者拷贝发生异常时,如果quiet为true不会记录警告信息。默认为false。

        verbose:是否记录正在拷贝的文件,默认为false。

        encoding:从Ant1.5起,设置拷贝文件的编码,默认为JVM编码格式。

        outputencoding:从Ant1.6起,设置写文件时的编码,如果设置encoding属性,默认与encoding属性相同,否则与JVM编码格式相同。

        enablemultiplemappings:从Ant1.6起,是否处理所有源路径映射,如果为true,处理所有映射,如果为false,则只处理第一个文件或目录。这个属性只有在存在mapper子元素时才有效。默认为false。

        granularity: 因为不是每个文件系统都支持将修改时间精确到毫秒,所以从Ant1.6.2起,可以设置修改时间允许的时间误差。默认是1秒,DOS系统是2秒。

        当使用file属性时,tofile与todir属性都可以使用;对于内嵌资源集合元素,如果包含的资源大于1,或者fileset中只定义了dir属性,或者指定了file属性,那么只能使用todir属性。在Apache Ant 1.8.2之前,tofile属性只支持文件系统资源的顶级拷贝。

三、简单示例

<project> <copy file="build.xml" tofile="build1.xml"/> <copy file="build1.xml" todir="./new"/> <copy todir="../tmpcopy"> <fileset dir="."/> </copy> <copy todir="afterfilter"> <fileset dir="." includes="*.txt"/> <filterset> <filter token="build" value="tmp"/> </filterset> </copy> </project>

转载请注明原文地址: https://www.6miu.com/read-1600216.html

最新回复(0)