美文网首页
Ant 目录和文件相关的任务

Ant 目录和文件相关的任务

作者: rosy_dawn | 来源:发表于2021-08-31 20:06 被阅读0次

    基于目录的任务

    某些任务使用目录树执行操作。例如,javac 任务就是这些基于目录的任务之一,它将包含 .java 文件的目录树编译成 .class 文件。由于其中一些任务对目录树做了大量工作,因此任务本身可以充当隐式文件集。

    无论文件集是隐式的还是非隐式的,处理目录树的子集通常非常有用。Apache Ant 提供了两种在文件集中创建文件子集的方法,这两种方法都可以同时使用:

    • 仅包含匹配任何 include 模式但不匹配任何 exclude 模式的文件和目录。请参考模式集
    • 根据选择器的嵌套元素集合所定义的选择条件来选择文件。请参考选择器

    基于文件的任务

    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,可以使用 tofiletodir。对于嵌套的资源集合元素,如果包含的资源数大于 1,或者如果在 <fileset> 中仅指定了 dir attribute,或者如果还指定了 file attribute,则只允许 todir
    todir 复制的目标目录位置。
    overwrite 是否覆盖已经存在的目标文件,即使目标文件的时间更新。 No;默认为 false
    force 是否覆盖只读的目标文件。自 Ant 1.8.2 开始引入。 No;默认为 false
    filtering 指示是否应在复制期间使用全局的构建文件过滤器进行 token 过滤。注意:将始终使用嵌套的 <filterset> 元素(即使未指定该 attribute),或其值为 falsenooff No;默认为 false
    flatten 忽略源文件的目录结构,并将所有文件复制到 todir attribute 指定的目录中。请注意,使用 flatten mapper 可以实现相同的效果。 No;默认为 false
    includeEmptyDirs 是否复制文件集中包含的所有空目录。 No;默认为 true
    failonerror 如果为 false,则在要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,记录警告消息,但不要停止生成。 No;默认为 true
    quiet 如果该 attribute 为 truefailonerrorfalse,则当要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,不要记录警告消息。从 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-8UTF-16Cp1252ISO-8859-1US-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,可以使用 tofiletodir。对于嵌套的资源集合元素,如果包含的资源数大于 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 为 truefailonerrorfalse,则当要复制的文件不存在、或其中一个嵌套文件集指向不存在的目录、或复制时发生错误时,不要记录警告消息。从 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 在任何包含目录的各种资源集合类型的上下文中都没有意义,但在任何情况下都不会尝试删除非空目录。目录是否为空取决于文件系统, includeexclude 模式在此处不适用。

    如果您想使用该 Task 删除由编辑器创建的临时文件,似乎不会起作用,请阅读基于目录的 Task 中的默认排除集,并查看下面的 defaultexcludes attribute。

    由于历史原因,<delete dir="x"/><delete><fileset dir="x"/></delete> 并不相同;<delete dir="x"/> 将尝试删除 x 中的所有内容,包括 x 本身,不考虑默认排除,盲目地跟随所有符号链接。如果需要更多控制,请使用嵌套的 <fileset>

    参数
    Attribute Description Required
    file 指定要删除的文件,该 attribute 值可以是简单的文件名(如果该文件存在与当前 base 目录下),相对路径、或绝对路径。 filedir attribute 至少二选一,除非指定了内嵌文集合。
    dir 要删除目录,包含其所有文件和子目录。注意:dir attribute 不是为文件指定一个目录名,文件和目录是彼此独立的。警告:不要将该 attribute 设置为 .${basedir},或者等价的绝对路径,除非您真的想递归删除 base 目录下的全部内容(如果当前工作目录不在 base 目录中,也会删除 base 目录本身)。 filedir 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:AttribChecksumChgrpChmodChownPatchFixCRLFReplaceReplaceRegExpSetPermissionsConcatSyncTempfileTouch

    相关文章

      网友评论

          本文标题:Ant 目录和文件相关的任务

          本文链接:https://www.haomeiwen.com/subject/rettwltx.html