类似文件的实体可以抽象为资源的概念。除了提供对类似文件属性的访问外,资源实现还应尽可能提供从底层实体读取内容和/或向底层实体写入内容的方法。虽然资源概念是在 Apache Ant 1.5.2 中引入的,但资源从 Ant 1.7 开始可供显式使用。
基本资源。其他资源类型派生自这种基本类型;因此,所有属性都可用,尽管在大多数情况下,无关属性将被忽略。这种资源实现以及所有资源实现都可用作单元素资源集合。
属性 | 描述 | 必需 |
---|---|---|
name | 此资源的名称 | 否 |
exists | 此资源是否存在 | 否;默认值为 true |
lastmodified | 此资源的最后修改时间 | 否 |
directory | 此资源是否类似目录 | 否;默认值为 false |
size | 此资源的大小 | 否 |
refid | 使此 resource 成为对在其他地方定义的 resource 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
表示通过本地文件系统约定可访问的文件。
属性 | 描述 | 必需 |
---|---|---|
file | 此资源表示的文件 | 是 |
basedir | 此资源的基目录。当设置此属性时,尝试访问资源的名称将产生相对于此位置的路径。 | 否 |
refid | 使此 file 成为对在其他地方定义的 file 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
表示通过 Java 类加载器可加载的资源。
属性 | 描述 | 必需 |
---|---|---|
name | 资源的名称。 | 是 |
classpath | 查找资源时要使用的类路径。 | 否 |
classpathref | 查找资源时要使用的类路径,以对在其他地方定义的 <path> 的引用形式给出。 |
否 |
loaderRef | 用于加载资源的加载器的名称,由指定的类路径构造。 | 否 |
parentFirst | 在使用嵌套类路径时,是否首先咨询父类加载器——父类加载器很可能是系统类加载器。 从 Ant 1.8.0 开始 |
否;默认为 true |
refid | 使此 javaresource 成为对在其他地方定义的 javaresource 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
类路径也可以作为嵌套类路径元素指定,其中 <classpath>
是路径状结构。
加载 Java 常量的值。作为javaresource 的特例,支持其所有属性和嵌套元素。常量必须指定为 public static
,否则无法加载。
属性 | 描述 | 必需 |
---|---|---|
name | 资源的名称。必须指定为完全限定的字段名称。 | 是 |
refid | 使此 javaconstant 成为对在其他地方定义的 javaconstant 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
这将 org.acme.Main
类的常量 VERSION
的值加载到 version 属性中。查找该类的类路径通过嵌套的 classpath
元素提供。
<loadresource property="version"> <javaconstant name="org.acme.Main.VERSION"> <classpath> <pathelement location="${acme.lib.dir}"/> </classpath> </javaconstant> </loadresource>
使用该常量的值 (build.xml
) 创建一个新文件 c:/temp/org.apache.tools.ant.Main.DEFAULT_BUILD_FILENAME。
<copy todir="c:/temp"> <javaconstant name="org.apache.tools.ant.Main.DEFAULT_BUILD_FILENAME"/> </copy>
表示 ZIP 存档中的条目。可以使用 archive 属性或嵌套的单元素资源集合指定存档。zipentry
仅支持文件系统资源作为嵌套元素。
属性 | 描述 | 必需 |
---|---|---|
zipfile | 包含此资源的 zip 文件 | 是,除非已指定嵌套资源集合 |
archive | zipfile 的别名 | |
name | 存档资源的名称 | 是 |
encoding | zip 文件的编码 | 否;默认为默认 JVM 字符编码 |
refid | 使此 propertyresource 成为对在其他地方定义的 propertyresource 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
表示 TAR 存档中的条目。可以使用 archive 属性或嵌套的单元素资源集合指定存档。
属性 | 描述 | 必需 |
---|---|---|
archive | 包含此资源的 tar 存档 | 是,除非已指定嵌套资源集合 |
name | 存档资源的名称 | 是 |
这不是一个独立的资源,而是另一个资源的包装器,它提供对资源内容的即时压缩。必须将单元素资源集合指定为嵌套元素。
这不是一个独立的资源,而是另一个资源的包装器,它提供对资源内容的即时压缩。必须将单元素资源集合指定为嵌套元素。
这不是一个独立的资源,而是另一个资源的包装器,它提供对资源内容的即时压缩。必须将单元素资源集合指定为嵌套元素。
XZ 压缩支持从 Apache Ant 1.10.1 开始添加,并且依赖于 Ant 分发版中未包含的外部库。有关更多信息,请参阅库依赖项。
表示 URL。
属性 | 描述 | 必需 |
---|---|---|
url | 要公开的 URL | 这些属性中只有一个 |
file | 要作为 file: URL 公开的 |
|
baseUrl | 必须与 relativePath 组合的基 URL | |
relativePath | 与 baseUrl 组合时定义 URL 的相对路径 | 如果使用 baseUrl |
refid | 使此 url 成为对在其他地方定义的 url 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
表示 Java 字符串。可以写入它,但只能写入一次,之后再次写入它将是错误的。
属性 | 描述 | 必需 |
---|---|---|
value | 此资源的值 | 否 |
refid | 使此 string 成为对在其他地方定义的 string 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
该资源还支持嵌套文本,只有在未设置 value 属性的情况下才能提供。
<string> self.log("Ant version =${ant.version}"); </string>
表示 Ant 属性。
属性 | 描述 | 必需 |
---|---|---|
name | 属性名称 | 是 |
资源集合是对将多个资源分组在一起的实体的抽象。Ant 的一些“传统”数据类型已被修改为表现得像资源集合一样。
奇怪的是,一些任务甚至可以合法地表现得像资源集合一样。
一个通用资源集合,专为与引用一起使用而设计。例如,如果第三方 Ant 任务生成未知类型的资源集合,则仍然可以通过 <resources>
集合访问它。这种集合类型的次要用途是作为其他资源集合的容器,保留嵌套集合的顺序以及重复资源(与union 相比)。
属性 | 描述 | 必需 |
---|---|---|
cache | 是否缓存结果。从 Ant 1.8.0 开始 | 否;默认值为 false |
refid | 使此 resourcecollection 成为对在其他地方定义的 resourcecollection 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
一组文件。这些文件通过从多个PatternSets 中获取的绝对模式进行匹配。这些模式可以作为嵌套的 <patternset>
元素指定。此外,<files>
持有一个隐式 PatternSet,并直接支持 PatternSet 的嵌套 <include>
、<includesfile>
、<exclude>
和 <excludesfile>
元素,以及 PatternSet 的属性。
文件选择器 可用作嵌套元素。文件必须被所有选择器选中才能被包含;因此,<files>
等效于 <and>
文件选择器容器。
更简单地说,这种类型等效于没有基目录的fileset。请注意,如果没有基目录,文件系统扫描将完全基于包含和排除模式。filename(或任何)选择器只能影响在基于模式的选择包含文件后的扫描过程。
属性 | 描述 | 必需 |
---|---|---|
includes | 必须包含的文件模式的逗号或空格分隔列表 | 至少一个 |
includesfile | 文件的名称;此文件的每一行都被视为包含模式。 | |
excludes | 必须排除的文件模式的逗号或空格分隔列表 | 否;默认为默认排除项,或者如果 defaultexcludes 为 no,则为无 |
excludesfile | 文件的名称;此文件的每一行都被视为排除模式。 | |
defaultexcludes | 是否应使用默认排除项 | 否;默认值为 true |
casesensitive | 模式是否区分大小写 | 否;默认值为 true |
followsymlinks | 是否遵循符号链接(请参阅下面的说明) | 否;默认值为 true |
refid | 使此 files 成为对在其他地方定义的 files 的引用。如果指定此属性,则不允许其他属性或嵌套元素。 |
否 |
说明:所有规范路径与其路径不同的文件/目录都被视为符号链接。在 Unix 系统上,这通常意味着该文件实际上是一个符号链接,但在其他平台上可能会导致错误的结果。
使用资源选择器限制嵌套资源集合
属性 | 描述 | 必需 |
---|---|---|
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 restrict 成为对在其他地方定义的 restrict 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
嵌套资源选择器用于通过逻辑AND组合来“缩小”包含的资源。这些模式类似于 文件选择器,但不出所料,它们针对的是资源。内部 antlib org.apache.tools.ant.types.resources.selectors
中提供了几个内置资源选择器。
and嵌套资源选择器。
or嵌套资源选择器。
not嵌套资源选择器。
按名称选择资源。
属性 | 描述 | 必需 |
---|---|---|
name | 使用标准 Ant 模式测试的名称模式。 | 这两个中的一个 |
regex | 与要选择的匹配文件的正则表达式。 | |
casesensitive | 名称比较是否区分大小写 | 否;默认值为 true |
handledirsep | 如果指定此项,映射器将把资源名称或名称属性中的 \ 字符视为 /,以进行匹配。此属性可以是 true或 false。自 Ant 1.8.0 起 | 否;默认值为 false |
选择现有资源。
按日期选择资源。
属性 | 描述 | 必需 |
---|---|---|
millis | 自 1970 年 1 月 1 日以来的毫秒数表示的比较日期/时间 | 以下之一 |
datetime | 格式化的比较日期/时间 | |
pattern | 与 datetime 属性一起使用的 SimpleDateFormat 兼容模式,使用当前区域设置 |
否;默认值为 MM/dd/yyyy hh:mm a,使用美国区域设置 |
granularity | 比较文件修改时间时使用的毫秒数宽限值。这是必需的,因为并非所有文件系统都支持将最后修改时间跟踪到毫秒级。 | 否;默认值因平台而异:FAT 文件系统 = 2 秒;Unix = 1 秒;NTFS = 1 毫秒。 |
when | 以下之一:before、 after、 equal |
否;默认值为 equal |
按类型(文件或目录)选择资源。
属性 | 描述 | 必需 |
---|---|---|
type | 以下之一:file、 dir、 any(自 Ant 1.8 起) |
是 |
按大小选择资源。
属性 | 描述 | 必需 |
---|---|---|
size | 要比较的大小 | 是 |
when | 以下之一:equal、 eq、 greater、 gt、 less、 lt、 ge(大于或等于)、 ne(不等于)、 le(小于或等于) |
否;默认值为 equal |
按类型选择资源。
属性 | 描述 | 必需 |
---|---|---|
class | 资源必须是其实例的类 | 以下之一 |
type | 必须从资源分配的 Ant 类型 | |
uri | 必须在其中定义 type 的 URI | 否 |
如果资源被所有嵌套资源选择器选中,则选择该资源。
如果资源被至少一个嵌套资源选择器选中,则选择该资源。
否定允许的单个嵌套资源选择器的选择结果。
如果资源未被任何嵌套资源选择器选中,则选择该资源。
如果资源被大多数嵌套资源选择器选中,则选择该资源。
属性 | 描述 | 必需 |
---|---|---|
allowtie | 是否将平局(当嵌套资源选择器的数量为偶数时)视为多数 | 否;默认值为 true |
根据资源与一个或多个“控制”资源的比较选择资源,使用嵌套的 资源比较器。
属性 | 描述 | 必需 |
---|---|---|
when | 比较(equal/ eq、 greater/ gt、 less/ lt、 le(小于或等于)、 ge(大于或等于)、 ne(不等于)。 |
否;默认值为 equal |
against | 量词(all/ each/ every、 any/ some、(正好) one、 most/ majority、 none。 |
否;默认值为 all |
必须使用嵌套的 <control> 元素指定将进行比较的资源,该元素表示 资源 集合。
假设命名空间设置
rsel="antlib:org.apache.tools.ant.types.resources.selectors" rcmp="antlib:org.apache.tools.ant.types.resources.comparators"
<restrict> <fileset dir="src" includes="a,b,c,d,e,f,g"/> <rsel:compare when="le" against="all"> <control> <resource name="d"/> </control> <rcmp:name/> </rsel:compare> </restrict>
选择文件 a、b、c 和 d。
<project rsel="antlib:org.apache.tools.ant.types.resources.selectors"> <macrodef name="copyFromPath"> <attribute name="todir"/> <attribute name="refid"/> <element name="nested-resource-selectors" optional="yes" implicit="true"/> <sequential> <mkdir dir="@{todir}" taskname="copyFromPath"/> <copy todir="@{todir}" taskname="copyFromPath"> <restrict> <path refid="@{refid}"/> <rsel:or> <nested-resource-selectors/> </rsel:or> </restrict> <flattenmapper/> </copy> </sequential> </macrodef> <copyFromPath refid="classpath" todir="todir"> <rsel:name name="log4j.properties"/> <rsel:name name="default.properties"/> </copyFromPath> </project>
创建 todir 目录,并从类路径(在编译时已使用)中复制(如果存在)文件 log4j.properties 和 default.properties。
<project> <filelist id="allfiles" dir="${ant.home}/bin" files="ant.cmd,foo.txt,ant.bat,bar.txt,ant"/> <restrict id="missingfiles"> <filelist refid="allfiles"/> <rsel:not xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"> <rsel:exists/> </rsel:not> </restrict> <echo>These files are missed: ${toString:missingfiles}</echo> </project>
资源集合 allfiles
定义了预期的一系列文件。restrict missingfiles
使用 <not><exists>
选择器来获取所有不存在的文件。最后,我们使用 toString:
pathshortcut 以可读形式获取它们:[echo] These files are missed: ....foo.txt;....bar.txt
根据资源的自然顺序或一个或多个嵌套的 资源比较器 对嵌套资源集合进行排序
属性 | 描述 | 必需 |
---|---|---|
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 sort 成为对在其他地方定义的 sort 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
可以通过指定一个或多个资源比较器来控制和自定义排序。可以根据多个条件对资源进行排序;第一个指定的条件是“最外层”,而最后一个指定的条件是“最内层”。内部 antlib org.apache.tools.ant.types.resources.comparators
中提供了几个内置资源比较器。
按名称对资源进行排序。
按是否存在对资源进行排序。不存在被视为“小于”存在。
按日期对资源进行排序。
按类型(文件或目录)对资源进行排序。由于目录包含文件,因此它们被视为“大于”。
按大小对资源进行排序。
按内容对资源进行排序。
属性 | 描述 | 必需 |
---|---|---|
binary | 是否应以二进制模式比较内容。如果为 false,则将不考虑特定于平台的行尾约定来比较内容。 |
否;默认值为 true |
反转自然排序顺序或单个嵌套比较器的排序顺序。
<property name="eol" value="${line.separator}"/> <pathconvert property="sorted" pathsep="${eol}"> <sort> <tokens> <string value="foo bar etc baz"/> <stringtokenizer/> </tokens> </sort> </pathconvert>
类型为字符串的资源 foo bar etc baz
被 stringtokenizer
分割为四个标记。这些标记被排序,并且 sorted
获取 bar baz etc foo
的值。
<sort> <fileset dir="foo"/> <reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators"> <date/> </reverse> </sort>
这将获取来自 foo 的所有文件,并按修改日期以反向顺序对其进行排序。由于使用的资源比较器(<reverse>
和 <date>
)位于内部 antlib 中,因此必须显式设置其命名空间。
从嵌套资源集合中包含前 count 个资源。这可以与 sort 集合一起使用,例如,从更大的集合中选择前几个最旧、最大等资源。
属性 | 描述 | 必需 |
---|---|---|
count | 要包含的资源数量 | 否;默认值为 1 |
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 first 成为对在其他地方定义的 first 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
自 Ant 1.7.1 起
从嵌套资源集合中包含最后 count 个资源。这可以与 sort 集合一起使用,例如,从更大的集合中选择最后几个最旧、最大等资源。
属性 | 描述 | 必需 |
---|---|---|
count | 要包含的资源数量 | 否;默认值为 1 |
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 last 成为对在其他地方定义的 last 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
自 Ant 1.9.5 起
包含除嵌套资源集合中的前 count 个资源之外的所有元素。这可以与 sort 集合一起使用,例如,从更大的集合中选择除前几个最旧、最大等资源之外的所有资源。
属性 | 描述 | 必需 |
---|---|---|
count | 要排除的资源数量 | 否;默认值为 1 |
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 allbutfirst 成为对在其他地方定义的 allbutfirst 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
自 Ant 1.9.5 起
包含除嵌套资源集合中的最后 count 个资源之外的所有元素。这可以与 sort 集合一起使用,例如,从更大的集合中选择除最后几个最旧、最大等资源之外的所有资源。
属性 | 描述 | 必需 |
---|---|---|
count | 要排除的资源数量 | 否;默认值为 1 |
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 allbutlast 成为对在其他地方定义的 allbutlast 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
包含从嵌套资源集合中收集的 string 标记。使用 TokenFilter 支持的相同标记器。对该资源集合的富有想象力的使用可以实现等效于 Unix 函数,例如 sort、grep -c、wc 和 wc -l。
属性 | 描述 | 必需 |
---|---|---|
encoding | 嵌套资源的编码 | 否;默认值为默认 JVM 字符编码 |
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 使此 tokens 成为对在其他地方定义的 tokens 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
<concat> <union> <sort> <tokens> <resources refid="input"/> <linetokenizer includedelims="true"/> </tokens> </sort> </union> </concat>
对资源集合 input
实现 Unix sort -u。
以下资源集合实现集合运算
嵌套资源集合的并集。
唯一支持的属性是 refid
,它使此 union
成为对在其他地方定义的 union
的 引用。如果指定,则不允许其他属性或嵌套元素。
嵌套资源集合的交集。
唯一支持的属性是 refid
,它使此 intersect
成为对在其他地方定义的 intersect
的 引用。如果指定,则不允许其他属性或嵌套元素。
嵌套资源集合的差集。
以下属性适用于所有集合运算资源集合
属性 | 描述 | 必需 |
---|---|---|
cache | 是否缓存结果;禁用可能会严重影响性能 | 否;默认值为 true |
refid | 将此 difference 设为对在其他地方定义的 difference 的 引用。如果指定了此属性,则不允许其他属性或嵌套元素。 |
否 |
<resources id="A"> <string value="a"/> <string value="b"/> </resources> <resources id="B"> <string value="b"/> <string value="c"/> </resources> <union id="union"><resources refid="A"/><resources refid="B"/></union> <intersect id="intersect"><resources refid="A"/><resources refid="B"/></intersect> <difference id="difference"><resources refid="A"/><resources refid="B"/></difference> <echo> A: ${toString:A} = a;b B: ${toString:B} = b;c union : ${toString:union} = a;b;c intersect : ${toString:intersect} = b difference: ${toString:difference} = a;c </echo>
从 Ant 1.8.0 开始
包装另一个资源集合,并使用 映射器 映射嵌套资源的名称。
即使 mappedresources 包装的资源集合包含基于文件系统的资源,mappedresources 也不会显示为基于文件系统。这意味着您不能将 mappedresources 与仅允许基于文件系统的资源的任务一起使用。
属性 | 描述 | 必需 |
---|---|---|
cache | 是否缓存结果;启用可能会提高性能。自 Ant 1.8.1 起 | 否;默认值为 false |
enablemultiplemappings | 如果为 true,则集合将对给定源路径使用所有映射。如果为 false,则它将仅处理第一个资源。自 Ant 1.8.1 起 |
否;默认为 false |
refid | 将此 mappedresources 设为对在其他地方定义的 mappedresources 的 引用。如果指定了此属性,则不允许其他属性或嵌套元素。 |
否 |
需要单个资源集合。
可以使用单个 映射器 来映射名称。如果没有给出映射器(老实说,这没有意义),则将使用标识映射器。
将给定目录中的所有文件复制到目标目录,并在扩展名中添加 .bak。请注意,这也可以通过将 mapper
直接嵌套到 copy
中来完成。
<copy todir="${target}"> <mappedresources> <fileset dir="${src}"/> <globmapper from="*" to="*.bak"/> </mappedresources> </copy>
创建一个 WAR 存档,将所有作为文件的 CLASSPATH
条目添加到 WEB-INF/lib 目录中,而不保留其文件系统结构。
<war destfile="${output}"> <mappedresources> <restrict> <path path="${java.class.path}"/> <type type="file"/> </restrict> <chainedmapper> <flattenmapper/> <globmapper from="*" to="WEB-INF/lib/*"/> </chainedmapper> </mappedresources> </war>
从 Ant 1.8.0 开始
此资源集合接受任意数量的嵌套资源,并假设所有这些资源必须是 ZIP 或 TAR 存档。<archives>
返回的资源是嵌套存档的内容。
此资源集合是 zipgroupfileset 的泛化,它仅受 zip 系列任务支持。
唯一支持的属性是 refid
,它将此 archives
设为对在其他地方定义的 archives
的 引用。如果指定了此属性,则不允许其他属性或嵌套元素。
<archives>
有两个嵌套元素 <zips>
和 <tars>
,它们本身是 联合,即它们接受任意数量的资源(集合)作为嵌套元素。
<zips>
的嵌套资源被视为 ZIP 存档,<tars>
的嵌套资源被视为 TAR 存档。
将类路径上所有 jar 文件中的所有文件复制到 ${target}。
<copy todir="${target}"> <archives> <zips> <restrict> <path path="${java.class.path}"/> <name name="*.jar"/> </restrict> </zips> </archives> </copy>
从 Ant 1.8.0 开始
此资源集合接受任意数量的嵌套资源,读取这些资源,并为读取的每一行返回一个资源。
如果该行包含冒号,Ant 将尝试将其用作 URL,如果失败(或该行不包含冒号),则将返回一个文件资源,其名称为该行的内容。
将为每一行扩展属性。如果属性扩展生成资源对象而不是字符串(例如,由于自定义属性帮助程序),则将直接返回这些资源。
<resourcelist>
是 <filelist>
的泛化。
属性 | 描述 | 必需 |
---|---|---|
encoding | 嵌套资源的编码 | 否;默认值为默认 JVM 字符编码 |
basedir | 用于解析相对于其的相对文件名的基目录。还用于为此资源集合创建的 FileResources 提供基目录。自 Ant 1.10.4 起 | 否 |
preserveduplicates | 使此 resourcelist 返回所有资源,次数与其指定的次数相同。否则,resourcelist 将仅返回每个资源,按其首次出现的顺序。自 Ant 1.10.10 起 |
否 |
refid | 将此 resourcelist 设为对在其他地方定义的 resourcelist 的 引用。如果指定了此属性,则不允许其他属性或嵌套元素。 |
否 |
<resourcelist>
接受任意数量的资源(集合)作为嵌套元素。
此外,<resourcelist>
支持嵌套的 <filterchain>
元素,这些元素可用于在扩展其行之前过滤/修改读取的资源。这样的嵌套元素对应于 过滤器链。
以下示例从几个可实际访问的备用 URL 的第一个 URL 中复制一个文件。它假设文件 mirrors.txt 如下所示
mirrors.txt: https://best.mirror.example.org/ http://second.best.mirror.example.org/mirror/of/best/ https://yet.another.mirror/ https://the.original.site/
<copy todir="${target}"> <first> <restrict> <resourcelist> <file file="mirrors.txt"/> </resourcelist> <exists/> </restrict> </first> </copy>