Anthtml
Apache Ant 是一個基於 Java的構建工具。java
下載Antweb
google、baidu。Windows用戶下載zip格式。解壓便可。apache
Windows安裝Antapi
Ant本質上是一個Java程序且應用於Java代碼的編譯,所以爲了使用Ant,系統須要好配置JDK。服務器
所謂的安裝Ant,即配置環境變量。app
注意:Win7下安裝時,若ANT_HOME配置在用戶變量中,須要以管理員身份打開cmd才能夠正常使用。因此,能夠把ANT_HOME配置在系統變量中就行了。less
經過以上步驟後,在命令行下輸入ant -version,即會顯示ANT版本號。jsp
基礎入門函數
HelloAnt工程
創建工程目錄以下
bin存放二進制腳本。output存放打包後的jar文件。src存放源代碼。build.xml文件是Ant腳本。
Java文件:HelloANT.java放到src目錄下。
public class HelloANT { public static void main(String[] args) { System.out.println("Hello ANT!!!"); } }
build.xml文件
<project name="HelloANT" default="run"> <!--清空bin、output文件夾--> <target name="delete"> <delete dir="bin" includes="*" /> <delete dir="output" includes="*" /> </target> <!--將src中的java文件編譯至bin文件中--> <target name="compile" depends="delete"> <javac srcdir="src" destdir="bin" /> </target> <!--將bin中的class文件打包成jar文件--> <target name="jar" depends="compile"> <jar destfile="output/HelloANT.jar" basedir="bin" /> </target> <!--運行bin文件中的HelloANT.class文件--> <target name="run" depends="jar"> <java dir="bin" classname="HelloANT" classpath="bin" /> </target> </project>
進入命令行,cd至build.xml文件存在的目錄中。輸入ant命令。
提示「BUILD SUCCESSFUL」,構建成功。
運行輸出了「Hello ANT!!!」。
bin目錄下生成Hello.class文件。
output目錄下生成HelloANT.jar文件。
Ant腳本簡介
Ant腳本是一個標準的XML文件,Ant腳本默認文件名爲build.xml。
Ant腳本結構
Ant腳本的根元素是project,該元素中能夠包含description元素、target元素、property元素和任何Task;target元素中也能夠包含若干Task。project元素是Ant構建文件的根元素,它表示一個Ant工程。也即Ant腳本所定義的工程。
Ant腳本的整體結構如圖:
ant關鍵元素
1. project元素
project 元素是 Ant 構件文件的根元素, Ant 構件文件至少應該包含一個 project 元素,不然會發生錯誤。在每一個 project 元素下,可包含多個 target 元素。接下來向讀者展現一下 project 元素的各屬性。
2. target 元素
target爲Ant的基本執行單元,它能夠包含一個或多個具體的任務。多個target 能夠存在相互依賴關係。
它有以下屬性:
3.task元素
一個task是一段可執行的代碼,也即由一個元素表示,元素的名稱就是該Task的名稱,不一樣的Task中能夠定義不一樣的屬性列表。
Task的通用結構以下:
<name attrubute1=」value1」 attribute2=」value2」 ... />
或
<name attrubute1=」value1」 attribute2=」value2」 ... > ... </name>
4. property 元素
property元素用於定義一個變量。
project 的屬性能夠經過 property 元素來設定,也能夠Ant 以外設定。能夠引入外部文件中的屬性值。例如 build.properties 。
property元素的經常使用屬性:
使用屬性值
使用$符號使用屬性值。
例:${builddir}
即輸出builddir屬性值。
$符號在Ant生成文件中具備特殊意義。若但願Ant把$當成普通字符,則應該使用$$。
例:
<echo>$${builddir}=${buildir}</echo>
輸出爲:[echo] ${builddir}=dd
Ant 提供了一些內置的屬性,它能獲得的系統屬性的列表與 Java 文檔中 System.getPropertis() 方法獲得的屬性一致,這些系統屬性可參考 sun 網站的說明。
同時, Ant 還提供了一些它本身的內置屬性,以下:
ANT經常使用Task
ANT提供了很是多的Task,並且每一個Task都有較多的屬性,因此不會一一列舉了。這裏只對經常使用Task的用法做簡單說明,並給出簡單示例。
編譯任務
javac
javac:用於編譯一個或多個Java源文件。
例:編譯{src}目錄及其子目錄下的全部java文件。class文件將放在{build}指定的目錄下,classpath表示須要用到的類文件或者目錄,debug設置爲on表示輸出debug信息。
<javac srcdir="{src}" destdir="{build}" classpath="xyz.jar" debug="on" />
例:編譯{src}和{src2}目錄及其子目錄下的全部。Java文件,可是package/p1/**,mypackage/p2/**將被編譯,而mypackage/p1/testpackage/**將不會被編譯。Class文件將放在{build}指定的目錄下,classpath表示須要用到的類文件或者目錄,debug設置爲on表示輸出debug信息。
<javac srcdir="{src}:{src2}" destdir="{build}" includes="mypackage/p1/**,mypackage/p2/**" excludes="mypackage/p1/testpackage/**" classpath="xyz.jar" debug="on" />
例:路徑是在property中定義的。
<property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/> <javac srcdir="{src}" destdir="{src}" classpath="{classpath}" debug="on" />
歸檔任務(Archive Tasks)
歸檔任務用於對文件系統中的文件進行打包或解包。
jar
用於生產JAR包,一般須要指定destfile屬性,用於指定所建立JAR包的文件名。一般還指定一個文件集,表示須要將哪些文件打包到JAR包裏。
例:將{build}/classes下面的全部文件打包到{dist}/lib/app.jar中
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes"/>
例:將{build}/classes下面的全部文件打包到{dist}/lib/app.jar中,可是包括mypackage/test/全部文件不包括全部的Test.class
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes" includes="mypackage/test/**" excludes="**/Test.class" />
例:manifest屬性指定本身的META-INF/MANIFEST.MF文件,而不是由系統生成。
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes" includes="mypackage/test/**" excludes="**/Test.class" manifest="my.mf" />
war
該任務用於將一個Web應用打包爲一個war文件。
例:假設文件目錄以下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
下面是任務的內容:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml"> <fileset dir="src/html/myapp"/> <fileset dir="src/jsp/myapp"/> <lib dir="thirdparty/libs"> <exclude name="jdbc1.jar"/> </lib> <classes dir="build/main"/> <zipfileset dir="src/graphics/images/gifs" prefix="images"/> </war>
完成後的結果:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
執行任務
java
java:用於運行某個Java類,一般須要classname屬性,用於指定須要運行哪一個類。
例:classname中指定要執行的類,classpath設定要使用的環境變量
<java classname="test.Main"> <classpath> <pathelement location="dist/test.jar"/> <pathelement path="{java.class.path}"/> </classpath> </java>
文件任務
copy
copy主要用來對文件和目錄的複製功能。舉例以下:
例:複製單個文件併爲複製的文件命名。
<copy file="original.txt" tofile="copied.txt"/>
例:將文件複製到另外的目錄。
<copy file="source.txt" todir="../home/philander"/>
例:將一個目錄複製到另一個目錄下。
<copy todir="../dest_dir"> <fileset dir="src_dir"/> </copy>
例:拷貝一批文件到指定目錄下
<copy todir="../dest/dir"> <fileset dir="src_dir"> <include name="**/*.java"/> <iexclude name="**/Test.java"/> </fileset> </copy> <copy todir="../dest/dir"> <fileset dir="src_dir" excludes="**/*.java"/> </copy>
例:拷貝一批文件到指定目錄下,將文件名後增長。Bak後綴
<copy todir="../backup/dir"> <fileset dir="src_dir"/> <mapper type="glob" from="*" to="*.bak"/> </copy>
delete
對文件或目錄進行刪除,舉例以下:
例:刪除某個文件。
<delete file="/home/photos/philander.jpg"/>
例:刪除某個目錄。
<delete dir="/home/photos"/>
例:刪除全部的備份目錄或空目錄。
<delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.bak"/> </delete>
mkdir
建立目錄。
例:<mkdir dir="/home/philander/build/classes"/>
move
移動文件或目錄,舉例以下:
例:移動單個文件。
<move file="sourcefile" todir=」movedir」/>
例:移動單個文件到另外一個目錄。
<move file="sourcefile" todir=」movedir」/>
例:移動或重命名一個文件
<move file="file.orig" tofile="file.moved"/>
例:移動或重命名一個文件到另外一個文件夾下面
<move file="file.orig" todir="dir/to/move/to"/>
例:移動某個目錄到另外一個目錄。
<move todir="newdir"> <fileset dir="olddir"/> </move>
例:將一組文件移動到另外的目錄下
<move todir="some/new/dir"> <fileset dir="my/src/dir"> <include name="**/*.jar"/> <exclude name="**/ant.jar"/> </fileset> </move>
例:移動文件過程當中增長。Bak後綴
<move todir="my/src/dir"> <fileset dir="my/src/dir"> <exclude name="**/*.bak"/> </fileset> <mapper type="glob" from="*" to="*.bak"/> </move>
其餘任務
echo
該任務用於輸出指定的消息。默認輸出到標準控制檯,同時能夠經過指定file屬性將消息輸出到文件中。另外,能夠經過level屬性指定在哪一站消息級別下輸出消息。
echo包括 message 、 file 、 append 和 level 四個屬性。
<echo message="Hello,ANT" file="/home/philander/logs/ant.log" append="true">
命令行中的Ant命令
運行Ant構建腳本
先使用cd命令到達目標文件夾下。
ant:該命令會讓ant自動搜索當前文件夾下的build.xml。若找到,則以該文件做爲生成文件,並執行默認的target。
ant -buildfile a.xml:該命令解析執行當前路徑下的a.xml文件。-buildfile可使用 -f -file代替。
ant -f a.xml:同上。
ant -file a.xml:同上。
運行指定的target
默認狀況下下,Ant運行生成文件裏指定的默認target。
ant target :運行時指定須要運行的target。
ant target1 target2 :運行多個target。
ant命令的通常格式:
ant [options] [filename] [targer1 [target2 [target3] ...]]
例:ant run
即運行build.xml文件中名稱爲run的target。
例:ant -f another.xml t1 t2 t3
即運行another.xml文件中名稱爲t1 t2 t3的target。
options能夠分別去如下值:
-help 或 -h
打印ant命令的幫助信息。
-projecthelp 或 -p
打印工程的基本信息,包括工程中的全局Task、Target、default Target等。
-version
打印Ant版本信息並退出。
-diagnostics
打印能夠幫助診斷和報告錯誤的系統信息,包括Ant的版本、Ant系統內建屬性的值、Ant庫、Java系統的屬性、計算機的屬性等。
-quiet 或 -q
ant運行時,只打印Task的輸出信息和重要的出錯信息。讓構建腳本安靜的執行。
-verbose 或 -v
ant運行時,即打印儘量詳細的信息到輸出終端。
-debug 或 -d
執行腳本時打印調試信息,調試信息比使用-v打印的詳細信息提供了更豐富的信息。
-emacs 或 -e
對打印信息不做任何修飾。
-lib <path>
指定一個搜索庫文件的路徑,包括jar文件和class文件。
-logfile 或 -l <file>
ant運行時將提示信息輸出到指定文件,而不是直接輸出到控制檯。
例:
ant -verbose -l a.log 運行時ant生產更多的提示信息,並將提示信息輸出到a.log文件中。
-logger <classname>
指定進行日誌記錄的類。
-listener <classname>
指定一個類,將該類的實例添加爲工程的一個監聽器。
-noinput
不容許輸入交互性質的輸入。
-D<property>=<value>
運行ant命令的同時指定屬性的值,相似於在運行構建腳本時輸入參數。該屬性會覆蓋腳本中的屬性值。
例:
ant -Dbook=Spring2 該命令會覆蓋生成文件中的book屬性值。
ant -Denv=%ANT_HOME% 該命令使用環境變量的值。經過這種方式就能夠將環境變量的值傳入生產文件。在Linux平臺下改成 ant -Denv1=$ANT_HOME。
-keep-going 或 -k
執行過程當中,若在運行某個Target時出錯,則繼續執行剩餘的全部不依賴於出錯Target的Target。
-propertyfile <name>
指定一個屬性文件,從文件中裝載全部屬性的值,但若還使用-D指定了相同的屬性,則-D指定的屬性值具備更高的優先級。
-inputhandler <class>
指定一個類,使用該類處理輸入請求。
-find 或 -s <file>
從當前目錄逐級向上級目錄搜索指定的構建文件直到文件系統的根目錄。若沒有指定<file>則搜索build.xml,搜索到構建文件後執行構建文件。
-nice number
設置Ant主線程的優先級,0爲最低,10爲最高,默認爲5。
-nouserlib
運行腳本的時候不使用用戶目錄庫中的jar文件。
-noclasspath
運行腳本的時候不使用類路徑。
-autoproxy
在Java1.5以上的運行環境中,該設置在運行Ant腳本時自動使用操做系統配置的代理服務器。
-main <class>
指定一個主函數的類,該主函數將覆蓋Ant的常規主函數,提供新的運行入口點。
該文僅爲學習文檔,更多詳細資料可參考官方教程