文件集

文件集是一组文件。这些文件可以在以基目录为起点的目录树中找到,并通过从多个 模式集选择器 中获取的模式进行匹配。

模式集可以指定为嵌套的 <patternset> 元素。此外,文件集还包含一个隐式模式集,并直接支持嵌套的 <include><includesfile><exclude><excludesfile> 元素,以及模式集的属性。

选择器可以在文件集内作为嵌套元素使用。如果文件集中任何选择器都没有选择该文件,则该文件不被视为文件集的一部分。这使得文件集等效于 <and> 选择器容器。

属性 描述 必需
dir 此文件集的目录树的根目录。 必须指定 dir 或 file 中的其中一个
file 指定单个文件文件集的快捷方式
defaultexcludes 指示是否使用 默认排除yes|no)。 否;默认为 yes
includes 必须包含的文件模式的逗号或空格分隔列表。 否;默认为所有文件
includesfile 文件名称;此文件的每一行都被视为包含模式。
注意:如果文件为空且文件集没有定义其他模式,则将包含所有文件。
excludes 必须排除的文件模式的逗号或空格分隔列表。 否;默认为默认排除,如果 defaultexcludesno 则为无
excludesfile 文件名称;此文件的每一行都被视为排除模式。
casesensitive 包含和排除模式是否必须以区分大小写的方式处理? 否;默认为 true
followsymlinks 是否应跟踪符号链接?请参阅下面的 说明 否;默认为 true
erroronmissingdir 指定如果基目录不存在会发生什么。如果为 true,则会发生构建错误,如果为 false,则文件集将被忽略/为空。自 Apache Ant 1.7.1 起 否;默认为 true(出于向后兼容性原因)
refid 使此 fileset 成为对在其他地方定义的 fileset引用。如果指定,则不允许其他属性或嵌套元素。

Ant 受限于 JRE 认为可移植的功能,符号链接是长期以来被认为不可移植的功能之一。随着 Java 7 和 NIO.2 的出现,这种情况发生了变化,但对符号链接的全面支持仍然缺乏(尤其是在 Zip 文件中)。Ant 中对符号链接的全面支持需要对 FileSet 进行不同的实现,并修改所有从中派生的任务和/或类型。目前,FileSet 中 followsymlinks 的语义是这样的:false 完全排除符号链接,而 true 允许选择器考虑符号链接,选择器可能具有其自己的 followsymlinks 属性,并具有正确的语义;即,false 允许选择器检查符号链接本身的属性,而 true 则检查其目标的属性。

示例

<fileset dir="${server.src}" casesensitive="yes">
  <include name="**/*.java"/>
  <exclude name="**/*Test*"/>
</fileset>

将目录 ${server.src} 中的所有 Java 源文件(其名称中不包含文本 Test)分组。

<fileset dir="${server.src}" casesensitive="yes">
  <patternset id="non.test.sources">
    <include name="**/*.java"/>
    <exclude name="**/*Test*"/>
  </patternset>
</fileset>

将与上面示例相同的文件分组,但还建立一个模式集,该模式集可以在其他 <fileset> 元素中引用,并以不同的目录为根目录。

<fileset dir="${client.src}" >
  <patternset refid="non.test.sources"/>
</fileset>

将目录 ${client.src} 中的所有文件分组,使用与上面示例相同的模式。

<fileset dir="${server.src}" casesensitive="yes">
  <filename name="**/*.java"/>
  <filename name="**/*Test*" negate="true"/>
</fileset>

将与最上面示例相同的文件分组,但使用 <filename> 选择器。

<fileset dir="${server.src}" casesensitive="yes">
  <filename name="**/*.java"/>
  <not>
    <filename name="**/*Test*"/>
  </not>
</fileset>

将与上一个示例相同的文件分组,但使用 <filename> 选择器和 <not> 选择器容器的组合。

<fileset dir="src" includes="main/"/>

选择 src/main 中的所有文件(例如 src/main/Foo.javasrc/main/application/Bar.java)。