FileSet 是一組檔案。這些檔案可以在從基礎目錄開始的目錄樹中找到,並與從多個 PatternSets 和 Selectors 中取得的樣式相符。
PatternSets 可以指定為巢狀 <patternset>
元素。此外,FileSet 保留一個隱含的 PatternSet,並直接支援 PatternSet 的巢狀 <include>
、<includesfile>
、<exclude>
和 <excludesfile>
元素,以及 PatternSet 的屬性。
Selectors 可用作 FileSet 內的巢狀元素。如果 FileSet 內的任何 selector 沒有選取檔案,則該檔案不會被視為 FileSet 的一部分。這使得 FileSet 等同於 <and>
selector 容器。
屬性 | 說明 | 必要 |
---|---|---|
dir | 此 FileSet 的目錄樹根目錄。 | 必須明確指定 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>
元素中參照的 PatternSet,根目錄位於不同的目錄。
<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)。