文件集是一组文件。这些文件可以在以基目录为起点的目录树中找到,并通过从多个 模式集 和 选择器 中获取的模式进行匹配。
模式集可以指定为嵌套的 <patternset>
元素。此外,文件集还包含一个隐式模式集,并直接支持嵌套的 <include>
、<includesfile>
、<exclude>
和 <excludesfile>
元素,以及模式集的属性。
选择器可以在文件集内作为嵌套元素使用。如果文件集中任何选择器都没有选择该文件,则该文件不被视为文件集的一部分。这使得文件集等效于 <and>
选择器容器。
属性 | 描述 | 必需 |
---|---|---|
dir | 此文件集的目录树的根目录。 | 必须指定 dir 或 file 中的其中一个 |
file | 指定单个文件文件集的快捷方式 | |
defaultexcludes | 指示是否使用 默认排除(yes|no )。 |
否;默认为 yes |
includes | 必须包含的文件模式的逗号或空格分隔列表。 | 否;默认为所有文件 |
includesfile | 文件名称;此文件的每一行都被视为包含模式。 注意:如果文件为空且文件集没有定义其他模式,则将包含所有文件。 |
否 |
excludes | 必须排除的文件模式的逗号或空格分隔列表。 | 否;默认为默认排除,如果 defaultexcludes 为 no则为无 |
excludesfile | 文件名称;此文件的每一行都被视为排除模式。 | 否 |
casesensitive | 包含和排除模式是否必须以区分大小写的方式处理? | 否;默认为 true |
followsymlinks | 是否应跟踪符号链接?请参阅下面的 说明。 | 否;默认为 true |
erroronmissingdir | 指定如果基目录不存在会发生什么。如果为 true,则会发生构建错误,如果为 false,则文件集将被忽略/为空。自 Apache Ant 1.7.1 起 |
否;默认为 true(出于向后兼容性原因) |
refid | 使此 fileset 成为对在其他地方定义的 fileset 的 引用。如果指定,则不允许其他属性或嵌套元素。 |
否 |
注意:所有规范路径与其路径不同的文件/目录都被视为符号链接。在 Unix 系统上,这通常意味着该文件实际上是一个符号链接,但在其他平台上可能会导致错误的结果。
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.java 或 src/main/application/Bar.java)。