FileSet

FileSet 是一組檔案。這些檔案可以在從基礎目錄開始的目錄樹中找到,並與從多個 PatternSetsSelectors 中取得的樣式相符。

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 必須排除的檔案樣式的逗號或空格分隔清單。 否;如果 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> 元素中參照的 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.javasrc/main/application/Bar.java)。