Apache Ant 一種基於XML的腳本語言,主要用與build。較之於makefile,有一下幾個優點:
- 可移植性。Makefile依賴於shell腳本,因此高度依賴環境,也就是說,有必要爲相同的工程在linux和windows上創建不同的make file文件。而ant不需要,因爲ant是基於java和XML的。而且ant的功能已經被許多用戶在多操作系統上進行了驗證。
- 更多更有用的工具。例如,可以通過引入AntContrib對其進行擴展,以支持<if>和<for>等控制流程的task。(儘管爲了保持邏輯的簡單性,有時推薦過多使用控制流程的task)
- 可擴展性較強。例如Oracle的測試框架testlogic。
- Ant源文件的結構性使得測試變得更加便捷。
關於其中結構性,個人認爲主要體現在一下幾個方面:
- Ant的buildfile是用XML寫的。每個buildfile包含一個project節點,project節點至少要有一個target節點。target節點包含若干個task節點。
- Ant支持節點之間的引用。例如,每個節點都有一個唯一的id,通過這個id,它可以被其他節點引用。
- 對於build中較爲常用的PATH和CLASSPATH類型對象,Ant提供了種類豐富的結構化定義方法。支持路徑,文件集合(包含特定格式的文件名,排除特定格式的文件名,文件夾,文件列表引用)
<classpath>
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
<dirset dir="${build.dir}">
<include name="apps/**/classes"/>
<exclude name="apps/**/*Test*"/>
</dirset>
<filelist refid="third-party_jars"/>
</classpath>
<path id="base.path">
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
</path>