Ant是什么
Ant是Apache的一個(gè)開(kāi)源項(xiàng)目。它是一個(gè)跨平臺(tái)的工具,主要用于項(xiàng)目項(xiàng)目的自動(dòng)編譯和打包和測(cè)試等。
Ant的優(yōu)點(diǎn)
1.與平臺(tái)無(wú)關(guān),因?yàn)樗腔贘AVA開(kāi)發(fā)的。
2.腳本格式是基于XML,維護(hù)起來(lái)相對(duì)簡(jiǎn)單。
Ant的安裝
1.在Apache的官網(wǎng)下載
??? http://www.apache.org/dist/ant/binaries/ ?選擇最新的 apache-ant-1.7.1-bin.zip
2.解壓安裝
?? 解壓到本機(jī)目錄,如D:Ant
?? 1.運(yùn)行----cmd
?? 2.配置環(huán)境變量
???????? set JAVA_HOME=JDK安裝路徑
???????? set ANT_HOME = D:Ant (Ant的安裝路徑)
?? 3.配置系統(tǒng)變量
???????? set PATH=%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin
???????? 注意,一定要加上 %PATH%;
????4.測(cè)試
???????? 直接在cmd窗口中輸入ant -version,然后回車即可看到當(dāng)前ant的版本信息
Ant的基本元素
?Ant是基于XML文件編寫的,默認(rèn)使用的文件為build.xml。下面拿一個(gè)簡(jiǎn)單的HelloWorld示例來(lái)演示。
??? 1.E:build.xml如下:
??????????
<?xml version="1.0" ?> <project name="HelloWorld"> <target name="test"> <echo message="Hello,World!" /> </target> </project>
??? 2.cmd----進(jìn)入E盤----運(yùn)行ant test--出現(xiàn)以下提示:????????
??????????? Buildfile: build.xml
??????????? test:
??????????????? [echo] Hello,World!
??????????? BUILD SUCCESSFUL
??????????? Total time: 0 seconds
如果配置文件不是build.xml,而是test.xml,此時(shí)需要在ant后面加上一個(gè)參數(shù)ant -f test.xml test,-f 后面帶的參數(shù)就是配置文件的文件名。
Ant配置文件關(guān)鍵屬性的解析
1.project
????project是Ant文件的根元素,必須包含至少一個(gè)project。在project下可以包含多個(gè)target。
??? 它主要有以下屬性
?????? 1) name
????????????? 用來(lái)指定project元素的名稱
?????? 2)default
????????????? 定義ant命令默認(rèn)執(zhí)行的target
?????? 3)basedir
????????????? 用于指定運(yùn)行的基本路徑信息。若未定義則為ANT_HOME
???? 修改上面的build.xml,如下:
?
<?xml version="1.0" ?> <project name="HelloWorld" default="test1" basedir="D:wsdl"> <target name="test"> <echo message="Hello,World!" /> </target> <target name="test1"> <echo message="Hello,${basedir}" /> </target> </project>
?
??? cmd---E:-----ant--回車顯示:?
??????? Buildfile: build.xml
??????? test1:
??????????? [echo] Hello,D:\wsdl
????????????BUILD SUCCESSFUL
??????? Total time: 0 seconds
???? 從結(jié)果很明顯可以看出名字為test的target并沒(méi)有執(zhí)行,執(zhí)行的是default定義的test1。而basedir屬性也打印出來(lái)了,為D:\wsdl。注意:屬性值的取法為${屬性名}
2.target
?? target是Ant執(zhí)行的任務(wù)單元,一個(gè)target里有一個(gè)或者多個(gè)任務(wù)。
???它主要有如下屬性:
??????? 1)name
????????????? 定義target的名字,這個(gè)名稱在一個(gè)project中是唯一的。ant可以根據(jù)target的name來(lái)定位target。
??????? 2)depends
???????????? 當(dāng)targetA的執(zhí)行需要targetB的運(yùn)行結(jié)果時(shí),可以定義targetA依賴于targetB,執(zhí)行時(shí)B會(huì)先執(zhí)行。
??????? 3)if
???????????? 判斷屬性是否存在,存在則執(zhí)行target,否則不執(zhí)行。
????????4)unless
???????????? 與if相反,判斷屬性是否不存在,不存在執(zhí)行target,否則不執(zhí)行。
??????? 5)description
???????????? 對(duì)當(dāng)前target的描述
?????? 修改上面的build.xml文件如下:
??????????????
<?xml version="1.0" ?> <project name="HelloWorld" default="test1" basedir="D:wsdl"> <target name="test"> <echo message="Hello,World!" /> </target> <target name="test1" depends="test" if="t" description="this is test1"> <echo message="Hello,${basedir}" /> </target> </project>
?
??? cmd --- E:----ant---回車顯示:
????? Buildfile: build.xml
????? test:
???????? [echo] Hello,World!
????? test1:
??????BUILD SUCCESSFUL
????? Total time: 0 seconds
??? 因?yàn)閠est1依賴于test,所以會(huì)先執(zhí)行test,由于t這個(gè)屬性并不存在,所以test1不會(huì)執(zhí)行。如果將上面的if改成unless,則test1和test都會(huì)執(zhí)行。
3.property
????? property是用來(lái)定義屬性名稱及屬性值的。它有兩種方式定義,第一種直接在build.xml文件中定義;第二種是在外部屬性文件里定義,然后在build.xml中引入。如test.properties,引入 <property file=” test.properties”/>。test.properties的格式為name=value。
?????? 修改上面的build.xml文件如下:
?
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <property file="build.properties" /> <property name ="name" value ="fer2005"/> <property name ="age" value ="30"/> <target name="classes"> <echo message="name:${name} age:${age}" /> </target> </project>
??? 運(yùn)行顯示:
????????? Buildfile: build.xml
??????????test:
????????????? [echo] name:fer2005 age:30
????????? BUILD SUCCESSFUL
????????? Total time: 0 seconds
Ant的主要任務(wù)
???????? ?1.echo
???????????? 輸出信息,有四個(gè)屬性:message file append?level
????????????? message:需要打印的消息
????????????? file:需要將打印的信息放入哪個(gè)文件
????????????? append:是否將消息追加到文件末尾,true追加,false則直接替換
????????????? level:消息輸出的控制級(jí)別,有info,warning,error
????????? 修改build.xml文件如下:
?????????????
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <property file="build.properties" /> <property name ="name" value ="fer2005"/> <property name ="age" value ="30"/> <target name="test"> <echo message="name:${name} age:${age}" /> <echo message="this is a echo test" file="test.txt" append="true" /> </target> </project>
??????? ?運(yùn)行,然后結(jié)果在E:test.txt中去查看。可以看見(jiàn)在test.txt中有this is a echo test。重新運(yùn)行一次,則會(huì)有兩個(gè)this is a echo test。若將append屬性去掉重新運(yùn)行則又只有一個(gè)this is a echo test了。
????????? 2.mkdir
???????????????新建目錄,只有一個(gè)屬性
??????????????? dir:定義新建的文件夾名稱。
???????????????
<mkdir dir="test" />
?????????????3.delete
???????????????? 刪除目錄或文件,有四個(gè)屬性
???????????????? file:所要?jiǎng)h除的文件
?????????????????dir:只有找一個(gè)屬性時(shí),刪除指定的目錄
???????????????? includeEmptyDirs:是否包含空目錄
???????????????? includes:包含何種類型的文件,可以使用通配符,與windows系統(tǒng)中的搜索功能相似。
???????????????? 修改build.xml如下:
?
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <target name="test"> <delete includeEmptyDirs="true" dir="." includes="*.txt"></delete> </target> </project>
?
????????????? 刪除當(dāng)前目錄下的空目錄和所有txt文件。
????????????? 也可以寫成這種格式:
???????????????????
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <target name="test"> <delete includeEmptyDirs="true"> <fileset dir="." includes="*.txt"/> </delete> </target> </project>
?
?
??????????? 4.copy
??????????????? 復(fù)制文件或目錄,主要有四個(gè)屬性
????????????????? ?file:需要復(fù)制的文件
?????????????????? tofile:復(fù)制好的新文件
?????????????????? dir:需要復(fù)制的目錄
?????????????????? todir:復(fù)制到新的目錄
???????????????復(fù)制文件???????????????
<copy file="build.xml" tofile="test.xml"></copy>
??????????????? 復(fù)制目錄
<copy todir="../testnewdir"> <fileset dir="testsrcdir"/> </copy>
??????????????? 復(fù)制文件到目錄?
<copy file="test.txt" todir="../newdir"/>
?
????????????? 5.move
?
?????????????????? 移動(dòng)文件或目錄,與copy類似 :
???????? 移動(dòng)單個(gè)文件(重命名):????????????????????
<move file="srcfile" tofile="newfile"/>
????????????????????
????????? 移動(dòng)文件到另一目錄:
<move file="srcfile" todir="newdir"/>
??移動(dòng)目錄: ???????
<move todir="newdir"> <fileset dir="srcdir"/> </move>
?
?利用Ant對(duì)Java程序的編譯和打包
?? 1.Java程序編譯
???????????javac命令
???????????使用方法如下:
?????????? IDE:Eclipse
??????????? 1.新建Java工程。如TestAnt
????????????如圖所示:
??????????????????2.新建類Test.java
??????????????????????
package com.fer2005.test; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("this a test class"); } }
?
???????????????? 3.在工程TestAnt目錄下新建build.xml文件
????????????????????
<?xml version="1.0" encoding="UTF-8"?> <project name ="TestAnt" default ="compile" basedir ="."> <target name ="clean"> <delete dir ="build"/> </target> <target name ="compile" depends ="clean"> <mkdir dir ="build/classes"/> <javac srcdir ="src" destdir ="build/classes"/> </target> </project >
???????????????執(zhí)行compile前必須先刪除build文件夾,然后通過(guò)mkdir建立文件夾,javac編譯當(dāng)前程序,保存的路徑是build下的classes目錄下。???
?????????????? 4.在build.xml上右鍵Run As---Ant Build
?????????????? 5.刷新工程,即可看見(jiàn)生成文件夾和class文件。如圖所示:
?
?????????????? java命令
????????????????????運(yùn)行程序,執(zhí)行類中的main方法。修改build.xml:
?????????????????????????
<?xml version="1.0" encoding="UTF-8"?> <project name="TestAnt" default="run" basedir="."> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > </project >
????????????????? 然后按上面的方法Ant build,打印出如下信息:
??????????????????????? Buildfile: D:\workspace\TestAnt\build.xml
???????????????????????????? clean:
??????????????????????????????????? [delete] Deleting directory D:\workspace\TestAnt\build
???????????????????????????? compile:
??????????????????????????????????? [mkdir] Created dir: D:\workspace\TestAnt\build\classes
????????????????????????????????????[javac] Compiling 1 source file to D:\workspace\TestAnt\build\classes
???????????????????????????? run:
???????????????????????????????????
[java] this a test class
?????????????????????????BUILD SUCCESSFUL
???????????????????????? Total time: 641 milliseconds
??????????????????????? jar
????????????????????????對(duì)java工程進(jìn)行打包,修改build.xml:
???????????????????????
<?xml version="1.0" encoding="UTF-8"?> <project name="TestAnt" default="jar" basedir="."> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > <target name="jar" depends="run"> <jar destfile="TestAnt.jar" basedir="build/classes"> <manifest> <attribute name="Main-class" value="com.fer2005.Test" /> </manifest > </jar > </target> </project >
?
???????????????????? 運(yùn)行完成后可以看見(jiàn)生成的jar包。
?
????????????2.Java Web?工程的編譯和打包
??????????????? 1.新建一個(gè)web工程,結(jié)構(gòu)圖如下:
?
??????????????????????2.修改build.xml
?????????????????????????????
<?xml version="1.0" ?> <project name="TestAnt" default="war" basedir="."> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > <target name="jar" depends="run"> <jar destfile="TestAnt.jar" basedir="build/classes"> <manifest> <attribute name="Main-class" value="com.fer2005.Test" /> </manifest > </jar > </target> <target name="war" depends="jar"> <war destfile ="build/TestAntWeb.war" webxml ="WebRoot/WEB-INF/web.xml"> <fileset dir ="WebRoot" includes ="**/*.jsp"/> <lib dir ="WebRoot/WEB-INF/lib"/> <classes dir="build/classes"/> </war> </target> </project >
?
?????????????????????? war
????????????????????????????? destfile:生成的war包的路徑和文件名
?????????????????????????????? webxml:web工程的配置文件web.xml所在路徑
?????????????????????????????? <fileset? dir ="WebRoot"? includes ="**/*.jsp"/> :打包webroot下的所有jsp文件
???????????????????????????????lib:包所在的路徑
????????????????????????????? ?classes:JAVA編譯后的類文件路徑。
???????????????????3.運(yùn)行即可得到war包TestAntWeb.war。
?????????????????? 4.將TestAntWeb.war放到%TOMCAT_HOME%\webapps下,啟動(dòng)tomcat測(cè)試war包是否可用。
???
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
