1、什麼是Ant
Ant(Another neat tool)使用java編寫的開源構建工具,爲源碼編譯、單元測試、打包等任務操作提供了自動化支持,並且可以通過java寫新的任務來擴建構建。
2、Ant安裝
(1)Ant屬於解壓配置即可使用的軟件
下載解壓apache-ant-1.10.5-bin.zip,例如解壓到:D:/ apache-ant-1.10.5
(2)window中設置ant環境變量:
ANT_HOME D:/ apache-ant-1.10.5
path D:/ apache-ant-1.10.5/bin(或者:%ANT_HOME%\bin)
(3)開始->運行->cmd,輸入如下命令:ant -v
3、Ant核心構建腳本build.xml講解
一個構建腳本由三個基本元素組成:一個project、多個target和多個可用的task,三者之間的關係如下:
task:是一段可執行的代碼,如創建一個目錄或移動一個文件,Ant自帶很多自定義task,用戶可以使用java編寫自己的task
<javac srcdir="src" destdir="dest"> <!--源代碼目錄和目標目錄由srcdir和destdir屬性配置,源代碼放在src,class放在dest-->
target:target是一組task的集合,target與target可以存在依賴關係
<target name="init"> <mkdir dir="build"/> </target> <!--名字爲init的target使用任務mkdir創建目錄build--> <target name="compile" depends="init"> <javac srcdir="src" destdir="build"/> </target> <!--名字爲compile的target依賴名字爲init的target,並且使用了javac任務-->
project:一個Ant構建腳本必須只能有一個project,project是Ant構建腳本的頂級元素,可包含多個target
<project> <target name="init"> <mkdir dir="build"/> </target> <target name="compile" depends="init"> <javac srcdir="src" destdir="build"/> </target> </project>
4、Ant案例實戰
項目目錄結構(假如其中demo爲D:\demo):
- demo
- |--src
- |----Hello.java(D:\demo\src\Hello.java)
- |--build.xml(D:\demo\build.xml)
hello.java 內容:
public class Hello{ public static void main(String[] args){ System.out.println("hello ant"); } }
build.xml 內容:
<project name="hello" default="dist" basedir="."> <!--設置全局屬性,比如源代碼、輸出和發佈目錄--> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <property name="version" value="1.0.0"/> <!--定義target名字爲init並創建編譯路徑--> <target name="init"> <mkdir dir="${build}"/> </target> <!--編譯--> <target name="compile" depends="init" description="compile the source"> <javac srcdir="${src}" destdir="${build}"/> </target> <!--打jar包--> <target name="dist" depends="compile" description="generate the jar"> <mkdir dir="${dist}"/> <jar jarfile="${dist}/hello-ant-${version}.jar" basedir="${build}" /> </target> <!--刪除編譯--> <target name="clean" description="clean build and dist"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project>
通過target的name可以分別指定執行ant init、ant compile、ant dist、ant clean
執行 ant dist 由於 init compile dist 三個tagert 之間的依賴,會依次執行如下圖:
執行ant dist 後會生成一個build的目錄存放編譯後的文件和生成一個dist存放jar文件,目錄結構如下:
- demo
- |--build
- |----Hello.class(D:\demo\build\Hello.class)
- |--dist
- |----hello-ant-1.0.0.jar(D:\demo\dist\hello-ant-1.0.0.jar)
- |--src
- |----Hello.java(D:\demo\src\Hello.java)
- |--build.xml(D:\demo\build.xml)
5、Ant優缺點總結
優點:由於Ant沒有對構建定義強加任何限制,構建靈活,沒有對項目目錄結構有硬性規定
缺點:(1)xml標記語言構建腳本比較臃腫,當使用標記語言描述類似if/else等邏輯語句是比較困難
(2)由於Ant沒有一套默認的構建邏輯,所以不同的項目都要重複書寫構建邏輯或者複製構建邏輯進行修改
(3)Ant沒有暴露構建細節,比如有多少個類編譯了多少的task執行了等等
(4)Ant本身不帶依賴管理,需要與Ivy集成管理依賴