Ant是什么
Ant是Apache的一個開源項目。它是一個跨平臺的工具,主要用于項目項目的自動編譯和打包和測試等。
Ant的優點
1.與平臺無關,因為它是基于JAVA開發的。
2.腳本格式是基于XML,維護起來相對簡單。
Ant的安裝
1.在Apache的官網下載
??? http://www.apache.org/dist/ant/binaries/ ?選擇最新的 apache-ant-1.7.1-bin.zip
2.解壓安裝
?? 解壓到本機目錄,如D:Ant
?? 1.運行----cmd
?? 2.配置環境變量
???????? set JAVA_HOME=JDK安裝路徑
???????? set ANT_HOME = D:Ant (Ant的安裝路徑)
?? 3.配置系統變量
???????? set PATH=%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin
???????? 注意,一定要加上 %PATH%;
????4.測試
???????? 直接在cmd窗口中輸入ant -version,然后回車即可看到當前ant的版本信息
Ant的基本元素
?Ant是基于XML文件編寫的,默認使用的文件為build.xml。下面拿一個簡單的HelloWorld示例來演示。
??? 1.E:build.xml如下:
??????????
<?xml version="1.0" ?> <project name="HelloWorld"> <target name="test"> <echo message="Hello,World!" /> </target> </project>
??? 2.cmd----進入E盤----運行ant test--出現以下提示:????????
??????????? Buildfile: build.xml
??????????? test:
??????????????? [echo] Hello,World!
??????????? BUILD SUCCESSFUL
??????????? Total time: 0 seconds
如果配置文件不是build.xml,而是test.xml,此時需要在ant后面加上一個參數ant -f test.xml test,-f 后面帶的參數就是配置文件的文件名。
Ant配置文件關鍵屬性的解析
1.project
????project是Ant文件的根元素,必須包含至少一個project。在project下可以包含多個target。
??? 它主要有以下屬性
?????? 1) name
????????????? 用來指定project元素的名稱
?????? 2)default
????????????? 定義ant命令默認執行的target
?????? 3)basedir
????????????? 用于指定運行的基本路徑信息。若未定義則為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
???? 從結果很明顯可以看出名字為test的target并沒有執行,執行的是default定義的test1。而basedir屬性也打印出來了,為D:\wsdl。注意:屬性值的取法為${屬性名}
2.target
?? target是Ant執行的任務單元,一個target里有一個或者多個任務。
???它主要有如下屬性:
??????? 1)name
????????????? 定義target的名字,這個名稱在一個project中是唯一的。ant可以根據target的name來定位target。
??????? 2)depends
???????????? 當targetA的執行需要targetB的運行結果時,可以定義targetA依賴于targetB,執行時B會先執行。
??????? 3)if
???????????? 判斷屬性是否存在,存在則執行target,否則不執行。
????????4)unless
???????????? 與if相反,判斷屬性是否不存在,不存在執行target,否則不執行。
??????? 5)description
???????????? 對當前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
??? 因為test1依賴于test,所以會先執行test,由于t這個屬性并不存在,所以test1不會執行。如果將上面的if改成unless,則test1和test都會執行。
3.property
????? property是用來定義屬性名稱及屬性值的。它有兩種方式定義,第一種直接在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>
??? 運行顯示:
????????? Buildfile: build.xml
??????????test:
????????????? [echo] name:fer2005 age:30
????????? BUILD SUCCESSFUL
????????? Total time: 0 seconds
Ant的主要任務
???????? ?1.echo
???????????? 輸出信息,有四個屬性:message file append?level
????????????? message:需要打印的消息
????????????? file:需要將打印的信息放入哪個文件
????????????? append:是否將消息追加到文件末尾,true追加,false則直接替換
????????????? level:消息輸出的控制級別,有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>
??????? ?運行,然后結果在E:test.txt中去查看。可以看見在test.txt中有this is a echo test。重新運行一次,則會有兩個this is a echo test。若將append屬性去掉重新運行則又只有一個this is a echo test了。
????????? 2.mkdir
???????????????新建目錄,只有一個屬性
??????????????? dir:定義新建的文件夾名稱。
???????????????
<mkdir dir="test" />
?????????????3.delete
???????????????? 刪除目錄或文件,有四個屬性
???????????????? file:所要刪除的文件
?????????????????dir:只有找一個屬性時,刪除指定的目錄
???????????????? includeEmptyDirs:是否包含空目錄
???????????????? includes:包含何種類型的文件,可以使用通配符,與windows系統中的搜索功能相似。
???????????????? 修改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>
?
????????????? 刪除當前目錄下的空目錄和所有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
??????????????? 復制文件或目錄,主要有四個屬性
????????????????? ?file:需要復制的文件
?????????????????? tofile:復制好的新文件
?????????????????? dir:需要復制的目錄
?????????????????? todir:復制到新的目錄
???????????????復制文件???????????????
<copy file="build.xml" tofile="test.xml"></copy>
??????????????? 復制目錄
<copy todir="../testnewdir"> <fileset dir="testsrcdir"/> </copy>
??????????????? 復制文件到目錄?
<copy file="test.txt" todir="../newdir"/>
?
????????????? 5.move
?
?????????????????? 移動文件或目錄,與copy類似 :
???????? 移動單個文件(重命名):????????????????????
<move file="srcfile" tofile="newfile"/>
????????????????????
????????? 移動文件到另一目錄:
<move file="srcfile" todir="newdir"/>
??移動目錄: ???????
<move todir="newdir"> <fileset dir="srcdir"/> </move>
?
?利用Ant對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 >
???????????????執行compile前必須先刪除build文件夾,然后通過mkdir建立文件夾,javac編譯當前程序,保存的路徑是build下的classes目錄下。???
?????????????? 4.在build.xml上右鍵Run As---Ant Build
?????????????? 5.刷新工程,即可看見生成文件夾和class文件。如圖所示:
?
?????????????? java命令
????????????????????運行程序,執行類中的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
????????????????????????對java工程進行打包,修改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 >
?
???????????????????? 運行完成后可以看見生成的jar包。
?
????????????2.Java Web?工程的編譯和打包
??????????????? 1.新建一個web工程,結構圖如下:
?
??????????????????????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.運行即可得到war包TestAntWeb.war。
?????????????????? 4.將TestAntWeb.war放到%TOMCAT_HOME%\webapps下,啟動tomcat測試war包是否可用。
???
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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