Ant 除 Property 外,提供豐富的**數據類型** 作為 Task 的參數,實現文件匹配、路徑構建、條件篩選等復雜邏輯。本文系統介紹六大核心數據類型定義與引用模式。
| 類型 | 核心作用 | 關鍵屬性/嵌套元素 |
|---|---|---|
| PatternSet | 定義文件名匹配模式集合 (include/exclude) | `includes`, `excludes`, `includesfile`, `excludesfile`;嵌套 ` |
| FileSet | **最常用**:基於目錄的文件集合,支持 PatternSet 所有匹配規則 + 目錄掃描 | `dir` (必填, 基準目錄);繼承 PatternSet 屬性;`casesensitive`, `followsymlinks`, `defaultexcludes="true|false"` |
| Selector | 文件選擇器:按修改時間、大小、內容、自定義邏輯篩選 FileSet | 嵌套 ` |
| FileList | 顯式列出文件名列表,**不掃描目錄**,文件可不存在 | `dir` (基準目錄), `files` (分號/逗號分隔文件名列表) |
| Path | 構建類路徑/庫路徑:有序文件/目錄列表,自動處理平台路徑分隔符 | 嵌套 ` |
| Regexp | 正則表達式模式,用於 ` | `pattern` (正則), `options="..."` (如 `ignorecase`);嵌套使用 |
<patternset id="meta.excludes">
<exclude name="**/*.bak"/>
<exclude name="**/CVS/"/>
<exclude name="**/.svn/"/>
<exclude name="**/.git/"/>
</patternset>
<!-- 在 FileSet 中引用 -->
<fileset dir="${src}" id="source.files">
<patternset refid="meta.excludes"/>
</fileset>
<fileset dir="${build}" id="recent.jars">
<include name="**/*.jar"/>
<!-- Selector: 只選最近 7 天修改、大小 > 100KB 的 jar -->
<date datetime="01/01/2023 00:00 AM" when="after" pattern="MM/dd/yyyy hh:mm aa"/>
<size value="100k" when="more"/>
<!-- 邏輯組合:預設 AND,可用 , , , 嵌套 -->
<and>
<date .../>
<size .../>
</and>
</fileset>
<path id="compile.classpath">
<pathelement location="${lib}/servlet-api.jar"/>
<pathelement path="${java.class.path}"/>
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
</path>
<javac srcdir="${src}" destdir="${build}" classpathref="compile.classpath"/>
<filelist dir="${doc}" files="readme.txt;license.txt;changelog.md" id="release.docs"/>
<zip destfile="${dist}/docs.zip" filelistref="release.docs"/>
選擇器可嵌套 `
<fileset dir="${src}">
<or>
<and>
<name name="**/*Test.java"/> <!-- 單元測試文件 -->
<date when="after" datetime="01/01/2023"/> <!-- 近期修改 -->
</and>
<contains text="TODO" casesensitive="false"/> <!-- 或包含 TODO -->
</or>
</fileset>