基于目录的任务
某些任务使用目录树执行操作。例如,javac 任务就是这些基于目录的任务之一,它将包含 .java 文件的目录树编译成 .class 文件。由于其中一些任务对目录树做了大量工作,因此任务本身可以充当隐式文件集。
无论文件集是隐式的还是非隐式的,处理目录树的子集通常非常有用。Apache Ant 提供了两种在文件集中创建文件子集的方法,这两种方法都可以同时使用:
基于文件的任务
Mkdir
Mkdir Task 创建一个目录。必要时还将创建不存在的父目录。如果目录已存在,则不执行任何操作。
参数
Attribute | Description | Required |
---|---|---|
dir | 要创建的目录。 | Yes |
示例
创建一个目录。
<mkdir dir="${dist}"/>
创建目录 ${dist}/lib
。
<mkdir dir="${dist}/lib"/>
Filter
Filter Task 为此项目设置 token 过滤器,或将属性文件读取为多个 token 过滤器定义并进行设置。token 过滤器由通过项目方法执行文件复制操作的所有 Task 使用。使用前请参阅此处的警告。
Task 使用 @
作为 token 分隔符。token 字符串不能包含分隔符;不正确的 token 将被忽略。
参数
Attribute | Description | Required |
---|---|---|
token | 不含分隔符(@ )的 token 字符串。 |
Yes;token 加 value 的组合,或者单个 filtersfile 二选一 |
value | 当复制文件时要需要替换 token 的字符串。 | Yes;token 加 value 的组合,或者单个 filtersfile 二选一 |
filtersfile | 含有所需过滤器的文件路径,该文件必须是一个 property 文件。 | Yes;token 加 value 的组合,或者单个 filtersfile 二选一 |
示例
将 src.dir 目录中的所有文件递归复制到 dest.dir 目录中,将所有出现的字符串 @year@
替换为 2000。
<filter token="year" value="2000"/>
<copy todir="${dest.dir}" filtering="true">
<fileset dir="${src.dir}"/>
</copy>
从 deploy_env.properties 文件中读取所有 property 条目,并将其设置为过滤器。
<filter filtersfile="deploy_env.properties"/>
Copy
Copy Task 将文件或资源集合复制到新文件或目录。默认情况下,仅当源文件比目标文件新或目标文件不存在时,才会复制文件。但是,可以使用 overwrite
attribute 显式覆盖文件。资源集合用于选择要复制的一组文件。要使用资源集合,必须设置 todir
attribute。请注意,某些资源(例如文件资源)以名称的形式返回绝对路径,并且在不使用嵌套映射器(或 flatten
属性)的情况下使用它们的结果可能不是您所期望的结果。
注意:如果在复制操作中使用过滤器,则应将复制操作仅限于文本文件,带过滤器的复制操作可能会损坏二进制文件。无论过滤器是由 filter Task 隐式定义的,还是作为 filterset 显式提供给复制操作,这都适用。参见编码注释。
参数
Attribute | Description | Required |
---|---|---|
file | 要复制的源文件。 | Yes,除非使用了内嵌的资源集合。 |
preservelastmodified | 为复制后的目标文件指定与原始源文件相同的上次修改时间。 | No;默认为 false 。 |
tofile | 复制的目标文件位置。在 Ant 1.8.2 之前,该 attribute 仅支持文件资源的复制。 | 通过 file attribute,可以使用 tofile 或 todir 。对于嵌套的资源集合元素,如果包含的资源数大于 1,或者如果在 <fileset> 中仅指定了 dir attribute,或者如果还指定了 file attribute,则只允许 todir 。 |
todir | 复制的目标目录位置。 | |
overwrite | 是否覆盖已经存在的目标文件,即使目标文件的时间更新。 | No;默认为 false 。 |
force | 是否覆盖只读的目标文件。自 Ant 1.8.2 开始引入。 | No;默认为 false 。 |
filtering | 指示是否应在复制期间使用全局的构建文件过滤器进行 token 过滤。注意:将始终使用嵌套的 <filterset> 元素(即使未指定该 attribute),或其值为 false 、no 或 off 。 |
No;默认为 false 。 |
flatten | 忽略源文件的目录结构,并将所有文件复制到 todir attribute 指定的目录中。请注意,使用 flatten mapper 可以实现相同的效果。 |
No;默认为 false 。 |
includeEmptyDirs | 是否复制文件集中包含的所有空目录。 | No;默认为 true 。 |
failonerror | 如果为 false ,则在要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,记录警告消息,但不要停止生成。 |
No;默认为 true 。 |
quiet | 如果该 attribute 为 true ,failonerror 为 false ,则当要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,不要记录警告消息。从 Ant 1.8.3 开始。 |
No;默认为 false 。 |
verbose | 打印出正在复制的文件路径。 | No;默认为 false 。 |
encoding | 过滤器复制文件时采用的编码。从 Ant 1.5 开始。 | No;默认为默认的 JVM 字符编码。 |
outputencoding | 写入文件时要使用的编码。从 Ant 1.6 开始。 | No;默认为设置的编码,如果没有设置则为默认的 JVM 编码。 |
enablemultiplemappings | 如果该 attribute 为 true ,Task 将处理给定源路径的所有映射。如果该 attribute 为 false ,则该 Task 将仅处理第一个文件或目录。仅当存在 <mapper> 子元素时,该 attribute 才相关。从 Ant 1.6 开始。 |
No;默认为 false 。 |
granularity | 在确定文件已过期之前,可以留出的毫秒数。这是必需的,因为不是每个文件系统都支持将上次修改的时间跟踪到毫秒级。如果源文件和目标文件位于不同的计算机上,并且时钟不同步,那么这也很有用。从 Ant 1.6.2 开始。 | No;默认为 1 秒,DOS 系统默认为 两秒。 |
指定为嵌套元素的参数
- 任意基于文件系统的资源集合。资源集合用于选择要复制的文件组。要使用资源集合,必须设置
todir
attribute。在 Ant 1.7 之前,只有<fileset>
被支持作为嵌套元素。 -
mapper
。可以使用嵌套的<mapper>
元素定义文件名转换。Copy Task 所使用的默认mapper
是<identitymapper>
。从 Ant 1.6.3 开始,可以使用filenamemapper
类型代替<mapper>
元素。请注意,传递给映射器的源名称取决于您使用的资源集合。如果使用<fileset>
或提供基准目录的任何其他集合,则传递给映射器的名称将是相对于基准目录的相对文件名。在任何其他情况下,将使用源的绝对文件名。 -
filterset
。过滤器集用于替换复制文件中的 token。要使用过滤器集,请使用嵌套的<FilterSet>
元素。可以使用多个过滤器集。 -
filterchain
。Copy Task 支持嵌套的过滤器链。如果在同一个 Copy Task 中使用<filterset>
和<filterchain>
元素,则首先处理所有<filterchain>
元素,然后处理<filterset>
元素。
示例
复制单个文件。
<copy file="myfile.txt" tofile="mycopy.txt"/>
将单个文件复制到目录。
<copy file="myfile.txt" todir="../some/other/dir"/>
将 src_dir
目录复制到上一级目录下的 new/dir
目录。
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
将一组文件复制到一个目录。
<copy todir="../dest/dir">
<fileset dir="src_dir">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy todir="../dest/dir">
<fileset dir="src_dir" excludes="**/*.java"/>
</copy>
将一组文件复制到一个目录,并在文件名后面动态添加 .bak
。
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<globmapper from="*" to="*.bak"/>
</copy>
将一组文件复制到一个目录,在所有文件中将 @TITLE@
文本替换为 Foo Bar
。
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
将当前类路径设置中的所有项收集到目标目录中,使目录结构扁平化。
<copy todir="dest" flatten="true">
<path>
<pathelement path="${java.class.path}"/>
</path>
</copy>
将某些资源复制到给定目录。
<copy todir="dest" flatten="true">
<resources>
<file file="src_dir/file1.txt"/>
<url url="https://ant.apache.org/index.html"/>
</resources>
</copy>
如果上面的示例没有使用 flatten
属性,<file>
资源将返回其完整路径作为源和目标名称,并且根本不会被复制。一般来说,最好将显式映射器与使用绝对路径作为名称的资源一起使用。
使用嵌套的过滤器链将两个最新资源复制到目标目录中。
<copy todir="dest" flatten="true">
<first count="2">
<sort>
<date xmlns="antlib:org.apache.tools.ant.types.resources.comparators"/>
<resources>
<file file="src_dir/file1.txt"/>
<file file="src_dir/file2.txt"/>
<file file="src_dir/file3.txt"/>
<url url="https://ant.apache.org/index.html"/>
</resources>
</sort>
</first>
</copy>
上例后面的段落也适用于本例。
在 Unix 系统中,复制文件时不保留文件权限;它们以默认的 UMASK
权限结束。这是由于缺乏在当前 Java 运行时中查询或设置文件权限的方法造成的。如果需要保留权限的复制功能,请使用 <exec executable="cp”…>
代替。
在 Windows 系统中,如果将文件复制到已存在该文件的目录中,但大小写不同,则复制后的文件会使用与原始文件相同的大小写。解决方法是在复制之前删除目标目录中的文件。
重要的编码注意事项:二进制文件在过滤时损坏的原因是过滤会使用一个 Reader 类来读取文件,读取文件时会指定一个文件编码方式的编码。有许多不同类型的编码——UTF-8
、UTF-16
、Cp1252
、ISO-8859-1
、US-ASCII
和(许多)其他编码。在 Windows 上,默认字符编码是 Cp1252
,在 Unix 上通常是 UTF-8
。对于这两种编码,都存在非法字节序列(UTF-8
中的字节序列多于 Cp1252
)。
Reader 类如何处理这些非法序列取决于字符解码器的实现。当前的 Sun Java 实现是将它们映射为合法字符。以前的 Sun Java(1.3 及更低版本)引发了格式错误的 InputException。IBM Java 1.4 也引发此异常。导致损坏的是字符的映射。在 Unix 上,默认值通常为 UTF-8
,这是一个大问题,因为很容易编辑文件以包含来自 ISO-8859-1
的非 US-ASCII
字符,例如丹麦字符。当 Ant 复制(过滤)该字符时,该字符将转换为问号(或类似的东西)。
Ant 能做的不多。它无法确定哪些文件是二进制文件——UTF-8
版本的韩语有很多字节,并设置了 top bit set。当前 Sun Java 实现没有告知它非法字符序列。过滤只包含 US-ASCII
的一个技巧是使用 ISO-8859-1
编码。这似乎不包含非法字符序列,低 7 位是 US-ASCII
。另一个技巧是将 LANG
环境变量从类似 us.utf8
的内容更改为 us
。
Move
Move Task 将文件移动到新文件或目录,或将文件集移动到新目录。默认情况下,如果目标文件已存在,则会覆盖该文件。关闭 overwrite
attribute 后,仅当源文件比目标文件新或目标文件不存在时,才会移动文件。资源集合用于选择要移动的一组文件。仅支持基于文件系统的资源集合,包括文件集、文件列表和路径。在 Ant 1.7 之前,只有 <fileset>
作为嵌套元素受到支持。要使用资源集合,必须设置 todir
attribute。
从 Ant 1.6.3 开始,file
attribute 可用于移动(重命名)整个目录。如果 tofile
表示现有文件,或者 todir
中存在同名目录,则操作将失败。
参数
Attribute | Description | Required |
---|---|---|
file | 要移动的源文件或源目录。 | 为一个文件或至少一个内嵌资源集合元素。 |
preservelastmodified | 为移动后的目标文件指定与原始源文件相同的上次修改时间。 | No;默认为 false 。 |
tofile | 移动到的目标文件位置。 | 通过 file attribute,可以使用 tofile 或 todir 。对于嵌套的资源集合元素,如果包含的资源数大于 1,或者如果在 <fileset> 中仅指定了 dir attribute,或者如果还指定了 file attribute,则只允许 todir 。 |
todir | 移动到的目标目录位置。 | |
overwrite | 是否覆盖已存在的文件,即使目标文件更新。 | No;默认为 true 。 |
force | 是否覆盖只读的目标文件。自 Ant 1.8.2 开始引入。 | No;默认为 false 。 |
filtering | 指示在移动时是否进行 token 的过滤操作。参考 filter Task 中的描述。 | No |
flatten | 忽略源文件的目录结构,并将所有文件复制到 todir attribute 指定的目录中。请注意,使用 flatten mapper 可以实现相同的效果。 |
No;默认为 false 。 |
includeEmptyDirs | 是否复制文件集中包含的所有空目录。 | No;默认为 yes 。 |
failonerror | 如果为 false ,则在要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或移动时发生错误时,记录警告消息,但不要停止生成。 |
No;默认为 true 。 |
quiet | 如果该 attribute 为 true ,failonerror 为 false ,则当要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,不要记录警告消息。从 Ant 1.8.3 开始。 |
No;默认为 false 。 |
verbose | 打印出正在移动的文件路径。 | No;默认为 false 。 |
encoding | 过滤器复制文件时采用的编码。从 Ant 1.5 开始。 | No;默认为默认的 JVM 字符编码。 |
outputencoding | 写入文件时要使用的编码。从 Ant 1.6 开始 | No;默认为设置的编码,如果没有设置则为默认的 JVM 编码。 |
enablemultiplemappings | 如果该 attribute 为 true ,Task 将处理给定源路径的所有映射。如果该 attribute 为 false ,则该 Task 将仅处理第一个文件或目录。仅当存在 <mapper> 子元素时,该 attribute 才相关。从 Ant 1.6 开始。 |
No;默认为 false 。 |
granularity | 在确定文件已过期之前,可以留出的毫秒数。这是必需的,因为不是每个文件系统都支持将上次修改的时间跟踪到毫秒级。如果源文件和目标文件位于不同的计算机上,并且时钟不同步,那么这也很有用。从 Ant 1.6.2 开始。 | No;默认为 1 秒,DOS 系统默认为 两秒。 |
performGCOnFailedDelete | 如果 Ant 删除文件或目录失败,会重试一次。如果该 attribute 设置为 true ,在重试删除之前 Ant 会执行一个垃圾回收操作。将该 attribute 设置为 true 是为了解决 Windows(默认为 true )上和位于 NFS 共享存储上的目录树的一些问题。从 Ant 1.8.3 开始。 |
No;Windows 上默认为 true ,其他操作系统上默认为 false 。 |
指定为嵌套元素的参数
-
mapper
。可以使用嵌套的<mapper>
元素定义文件名转换。<move>
元素使用的默认mapper
是<identitymapper>
。 请注意,传递给映射器的源名称取决于您使用的资源集合。如果使用<fileset>
或提供了一个 base 目录的任何其他集合,则传递给映射器的名称将是相对于基准目录的相对文件名。在任何其他情况下,将使用源文件的绝对文件名。 -
filterchain
。Move Task 支持嵌套的过滤器链。如果在同一 Move Task 中使用<filterset>
和<filterchain>
元素,则首先处理所有<filterchain>
元素,然后处理<filterset>
元素。
示例
移动单个文件(重命名文件)。
<move file="file.orig" tofile="file.moved"/>
将单个文件移动到目录。
<move file="file.orig" todir="dir/to/move/to"/>
将目录移动到新目录。
<move todir="new/dir/to/move/to">
<fileset dir="src/dir"/>
</move>
或者,从 Ant 1.6.3 开始:
<move file="src/dir" tofile="new/dir/to/move/to"/>
将一组文件移动到新目录。
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**/*.jar"/>
<exclude name="**/ant.jar"/>
</fileset>
</move>
将文件列表移动到新目录。
<move todir="some/new/dir">
<filelist dir="my/src/dir">
<file name="file1.txt"/>
<file name="file2.txt"/>
</filelist>
</move>
将 .bak
附加到目录中所有文件的名称。
<move todir="my/src/dir" includeemptydirs="false">
<fileset dir="my/src/dir">
<exclude name="**/*.bak"/>
</fileset>
<mapper type="glob" from="*" to="*.bak"/>
</move>
Delete
Delete Task 删除单个文件、指定目录及其所有文件和子目录,或一个或多个资源集合指定的一组文件。<fileset>
的字面含义是不包括目录,但是,当使用嵌套文件集时,可以通过将 includeEmptyDirs
attribute 设置为 true 来触发删除空目录。请注意,includeEmptyDirs
attribute 在任何包含目录的各种资源集合类型的上下文中都没有意义,但在任何情况下都不会尝试删除非空目录。目录是否为空取决于文件系统, include
或 exclude
模式在此处不适用。
如果您想使用该 Task 删除由编辑器创建的临时文件,似乎不会起作用,请阅读基于目录的 Task 中的默认排除集,并查看下面的 defaultexcludes
attribute。
由于历史原因,<delete dir="x"/>
与 <delete><fileset dir="x"/></delete>
并不相同;<delete dir="x"/>
将尝试删除 x 中的所有内容,包括 x 本身,不考虑默认排除,盲目地跟随所有符号链接。如果需要更多控制,请使用嵌套的 <fileset>
。
参数
Attribute | Description | Required |
---|---|---|
file | 指定要删除的文件,该 attribute 值可以是简单的文件名(如果该文件存在与当前 base 目录下),相对路径、或绝对路径。 |
file 和 dir attribute 至少二选一,除非指定了内嵌文集合。 |
dir | 要删除目录,包含其所有文件和子目录。注意:dir attribute 不是为文件指定一个目录名,文件和目录是彼此独立的。警告:不要将该 attribute 设置为 . 和 ${basedir} ,或者等价的绝对路径,除非您真的想递归删除 base 目录下的全部内容(如果当前工作目录不在 base 目录中,也会删除 base 目录本身)。 |
file 和 dir attribute 至少二选一,除非指定了内嵌文集合。 |
verbose | 是否显示每个要删除的文件。 | No;默认为 false 。 |
quiet | 如果指定的文件或目录不存在,则不要显示诊断消息(除非调用 Ant 时打开了 -verbose 或 -debug 开关),也不修改退出状态以反映错误。当该 attribute 设置为 true 时,如果无法删除文件或目录,则不会报告错误。此设置模拟 Unix rm 命令的 -f 选项。将该 attribute 设置为 true 意味着将 failonerror 设置为 false 。 |
No;默认为 false 。 |
failonerror | 控制在出现错误时是停止构建,还是向屏幕报告。仅当 quiet 设置为 false 时该 attribute 才相关。 |
No;默认为 true 。 |
includeemptydirs | 当使用文件集时是否删除空目录。 | No;默认为 false 。 |
includes | 已弃用,请使用资源集合。匹配逗号或空格分隔的路径模式列表的文件将被删除。所有文件都是相对于 dir attribute 所指定的目录。 |
No |
includesfile | 已弃用,请使用资源集合。指定一个文件名,该文件的每一行都是一个需要删除的文件路径模式。 | No |
excludes | 已弃用,请使用资源集合。匹配逗号或空格分隔的路径模式列表的文件将不会被删除。所有文件都是相对于 dir attribute 所指定的目录。 |
No;默认为 defaultexcludes attribute 值,如果defaultexcludes 的值为 no ,则该 attribute 的值为 none。 |
excludesfile | 已弃用,请使用资源集合。指定一个文件名,该文件的每一行都是一个不需要删除的文件路径模式。 | No |
defaultexcludes | 已弃用,请使用资源集合。该 attribute 表示是否使用默认排除。 | No;默认为 true 。 |
deleteonexit | 表示如果删除文件失败,是否使用 File#deleteOnExit() 。这将会使 JVM 在 JVM 进程终止时尝试删除文件。从 Ant 1.6.2 开始。 |
No;默认为 false 。 |
removeNotFollowedSymlinks | 如果符号链接未跟随时(followSymlinks attribute 为 false,或符号链接的数值过大)是否删除符号链接。从 Ant 1.8.0 开始。 |
No;默认为 false 。 |
performGCOnFailedDelete | 如果 Ant 删除文件或目录失败,会重试一次。如果该 attribute 设置为 true ,在重试删除之前 Ant 会执行一个垃圾回收操作。将该 attribute 设置为 true 是为了解决 Windows(默认为 true )上和位于 NFS 共享存储上的目录树的一些问题。从 Ant 1.8.3 开始。 |
No;Windows 上默认为 true ,其他操作系统上默认为 true 。 |
示例
删除文件 /lib/ant.jar。
<delete file="/lib/ant.jar"/>
删除 lib 目录,包括 lib 的所有文件和子目录。
<delete dir="lib"/>
从当前目录和任何子目录中删除扩展名为 .bak 的所有文件。
<delete>
<fileset dir="." includes="**/*.bak"/>
</delete>
删除 build 目录中的所有文件和子目录,包括 build 目录本身。
<delete includeEmptyDirs="true">
<fileset dir="build"/>
</delete>
删除 build 目录中的所有文件和子目录,而不删除 build 目录本身。
<delete includeemptydirs="true">
<fileset dir="build" includes="**/*"/>
</delete>
删除 src 下的 Subversion 元数据目录。因为 .svn 是默认排除的开启状态,所以您必须使用 defaultexcludes 标志,否则 Ant 不会删除这些目录和其中的文件。
<delete includeemptydirs="true">
<fileset dir="src" includes="**/.svn/" defaultexcludes="false"/>
</delete>
Get
Get Task 从 URL 获取文件。启用 verbose
选项时,该 Task 每获取 100 Kb 就输出一个 .
。Java 运行时支持的任何 URL Schema 在此处都有效,包括 http:
、https:
、ftp:
和 jar:
。
可以指定用户名和密码,在这种情况下,将使用 Basic 身份验证。这仅在 HTTPS 链接上是安全的。从 Ant 1.7.0 开始,在 Java 5 或更高版本上运行的 Ant 可以使用操作系统的代理设置(如果使用 -autoproxy
命令行选项启用)。对于早期的 Java 版本,还有 <setproxy>
Task。启用代理后,如果请求被中继到代理,则针对本地主机的 <get>
Task 可能无法按预期工作。
参数
Attribute | Description | Required | |
---|---|---|---|
src | 要获取文件的 URL 地址。 | Yes,或者一个内嵌资源集合。 | |
dest | 存储所获取文件的文件或目录位置。 | Yes | |
verbose | 输出详细的处理信息(on
|
off )。 |
No;默认为 off
|
quiet | 如果为 true ,则仅输出错误(true
|
false )。 |
No;默认为 false
|
ignoreerrors | 输出 error 但不当做 fatal(致命错误)。 | No;默认为 false
|
|
usetimestamp | 该 attribute 控制下载,以便仅在远程文件比本地副本更新时才获取远程文件。如果没有本地副本,则始终进行下载。下载文件时,下载文件的时间戳设置为远程时间戳。注意:此时间戳工具仅适用于使用 HTTP 协议的下载。 | No;默认为 false
|
|
username | HTTP Basic 认证的用户名。 | Yes,如果设置了 password
|
|
password | HTTP Basic 认证的密码。 | Yes,如果设置了 username
|
|
maxtime | 指定单次下载需要的最长时间(秒数),超过这个时间下载将会中断,当成一个错误。自 Ant 1.8.0 开始。 | No;默认为 0 ,表示无限制 |
|
retries | 设置打开 URI 的尝试次数。该 attribute 的名称具有误导性,因为值 1 表示错误时不进行重试,值 0 表示根本不访问 URI。自 Ant 1.8.0 开始。 | No;默认为 3
|
|
skipexisting | 跳过在本地文件系统中已存在的文件。从 Ant 1.8.0 开始。 | No;默认为 false
|
|
httpusecaches | 仅适用于 HTTP。如果该 attribute 设置为 true,允许在 HttpUrlConnection 级别缓存,如果该属性设置为 false,则关闭缓存。注意:这仅会提示底层的 UrlConnection 类,具体的实现和代理服务器可以自由地忽略该设置。 |
No;默认为 true
|
|
useragent | 发送的 User-Agent HTTP 请求头。从 Ant 1.9.3 开始。 |
No;默认为 Ant 的版本 | |
tryGzipEncoding | 当该 attribute 设置为 true 时,Ant 会告知服务器它希望接收 gzip 编码来减少传输的数据量并透明地解压缩。将该 attribute 设置为 true 也意味着 Ant 将会自动解压 .tar.gz 及类似文件。从 Ant 1.9.5 开始。 |
No;默认为 false
|
指定为嵌套元素的参数
-
任何资源集合。资源集合用于选择要下载的 URL 组。如果集合包含多个资源,则
dest
attribute 必须指向一个目录(如果存在),或者将创建一个目录(如果不存在)。除非还指定了映射器,否则目标文件名将使用源 URL 路径的最后一部分。 -
mapper
。可以使用嵌套<mapper>
元素定义名称转换。您还可以使用任何filenamemapper
类型来代替<mapper>
元素。映射程序将接收资源的名称作为参数。将跳过映射器不返回或返回多个映射名称的任何资源。如果返回的名称是相对路径,则将其视为相对于dest
attribute。 -
header
。可以向请求中添加任意数量的 HTTP 头。嵌套的<header/>
节点的 attribute 如下所示:Attribute Description Required name Header 的名称。无法为 null 或空。前面和后面的空格将会移除。 Yes value Header 的值。无法为 null 或空。前面和后面的空格将会移除。 Yes
示例
获取的索引页 https://ant.apache.org/,并将其存储在文件 help/index.html 中。
<get src="https://ant.apache.org/" dest="help/index.html"/>
如果本地副本丢失或过期,则获取 Ant(当前和过去)版本管理器的 PGP 密钥。使用 verbose
选项获取进度信息。
<get src="https://www.apache.org/dist/ant/KEYS" dest="KEYS" verbose="true" usetimestamp="true"/>
从具有访问控制的服务器获取某些文件。虽然正在使用 HTTPS,但如果忽略它是构建文件的一部分这一事实(第三方可能读取该构建文件中的用户名和密码),那么 Basic 身份验证以明文形式发送密码是没有安全意义的。如果需要更多的安全性,请考虑使用 Input Task 来查询密码。
<get src="https://insecure-bank.org/statement/user=1214" dest="statement.html" username="1214" password="secret"/>
使用如下所示的宏,可以下载一个工件及其 SHA1 校验和(当然,假设校验和文件有某种命名约定),并动态验证校验和。
<macrodef name="get-and-checksum">
<attribute name="url"/>
<attribute name="dest"/>
<sequential>
<local name="destdir"/>
<dirname property="destdir" file="@{dest}"/>
<get dest="${destdir}">
<url url="@{url}"/>
<url url="@{url}.sha1"/>
<firstmatchmapper>
<globmapper from="@{url}.sha1" to="@{dest}.sha"/>
<globmapper from="@{url}" to="@{dest}"/>
</firstmatchmapper>
</get>
<local name="checksum.matches"/>
<local name="checksum.matches.fail"/>
<checksum file="@{dest}" algorithm="sha" fileext=".sha" verifyproperty="checksum.matches"/>
<condition property="checksum.matches.fail">
<equals arg1="${checksum.matches}" arg2="false"/>
</condition>
<fail if="checksum.matches.fail">Checksum error</fail>
</sequential>
</macrodef>
获取 https://ant.apache.org/ 的索引和常见问题解答页面,并将其存储在必要时将创建的 downloads 目录中。
<get dest="downloads">
<url url="https://ant.apache.org/index.html"/>
<url url="https://ant.apache.org/faq.html"/>
</get>
使用自定义 HTTP 头。
<get src="https://ant.apache.org/index.html" dest="downloads">
<header name="header1" value="headerValue1"/>
<header name="header2" value="headerValue2"/>
<header name="header3" value="headerValue3"/>
</get>
还有一些不常用的文件相关的 Task:Attrib、Checksum、Chgrp、Chmod、Chown、Patch、FixCRLF、Replace、ReplaceRegExp、SetPermissions、Concat、Sync、Tempfile、Touch。
网友评论