首先是ant的基本概念:Project,Target,Tasks,Properties,Pathshtml
1.Projectjava
<project> build.xml文件最頂層的元素,它有三個可選的屬性:
名稱(name):工程的名稱
默認(default):默認的目標(target)。
基礎目錄(basedir):工程的根目錄,工程全部的相對路徑今後算起。linux
2. targetweb
每一個project定義了0個或者多個target,是project的次級目錄。正則表達式
一個target是一組要執行的task組成的。算法
當啓動ant時,能夠選擇你想要執行的target,若是沒有指定,就執行project的屬性default定義的target。
能夠依據條件(使用IF/UNLESS)來決定是否執行。一個target的執行能夠依賴另外一個target。
target的依賴是能夠傳遞的。依賴的target先執行。例如:sql
<target name="A"/> <target name="B" depends="A"/> <target name="C" depends="A"/> <target name="D" depends="B,C"/>
其中,若是咱們須要執行target D,而D的執行依賴於Target B和C,B和C又依賴於A。
所以,要執行target D,首先要執行A,而後是B,而後是C,最後纔是Dapache
3.Taskwindows
task是一些能夠執行的命令,它有許多屬性(例如參數)。ant有超過80個核心task,超過60個可選task,超過100個第三方工具和task。數組
對於特定的問題,也能夠自定義一個ant task擴展。
4.Properties
一個屬性有名稱和值,名稱是大小寫敏感。
屬性能夠用在task的定義的屬性中,能夠經過使用${屬性名稱}來獲取屬性值,而後放置到task的屬性中。
例如:若是一個屬性名爲:builddir,其值爲"build"。那麼能夠在task使用${buiddir}變量。在運行時就解析爲build。
屬性是不可變的,即一旦屬性名及其值定義,編譯中的其它部分只能引用不能夠從新定義或者改變其值。
4.1 設置屬性 - 前置屬性
當同一個屬性被屢次定義時,第一次的定義起效,接下來全部的定義都不會生效。下面是前置屬性的規則:
可使用命令行定義前置屬性:-Dname=value
<project>元素下面的<property>元素根據書寫的順序定義。
<target>元素下面的<property>元素根據它們執行的順序。
4.2 設置屬性示例
設置一個屬性foo.dist 其值爲 "dist":<property name="foo.dist" value="dist"/>
從一個名爲"foo.properties"的文件中讀取一組屬性:<property file="foo.properties"/>
從classpath 的資源文件foo.properties中讀取一組屬性:<property resource="foo.properties"/>
從系統環境變量中讀取和保存屬性:<property environment="env"/>
4.3 內置屬性
若是定義了<property>task,那麼ant能夠訪問全部的系統屬性。例如:${os.name}操做系統名稱,更多的系統信息參見system.getProperties()
另外,ant還有一些內置屬性:
basedir
工程的基礎目錄的絕對路徑(<project>中定義的basedir屬性)
ant.file
構建文件的絕對路徑。
ant.version
ant的版本信息
更多的內置屬性:
ant.project.name
當前執行工程的名稱,<project>中定義的name屬性。
ant.java.version
ant發現的JVM版本,當前包含的值: "1.1", "1.2", "1.3", "1.4", "1.5" ,"1.6"
5 path
<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>
接下來,咱們分享一下ant解析配置文件build爲tasks的順序流程:
從上面的解析咱們能夠看到ant的核心就是task,那麼咱們來了解ant有哪些task呢?
1. Archive Tasks
BUnzip2
解壓gzip或者bzip2壓縮的文件
BZip2
使用gzip或者bzips算法壓縮文件,這個task沒有依賴檢查,直接產生輸出文件。
Cab
建立一個微軟CAB壓縮文件,這個task相似於jar或者zip task。這個task只要適用在windows環境中。
Ear
jar task的擴展,根據企業應用文件結構打包。
GUnzip
解壓一個gzip文件。
GZip
gzip壓縮一組文件
Jar
Jar壓縮一組文件.
Jlink
過時的. 使用jar或者zip task中的zipfileset和zipgroupfileset屬性替代.
Manifest
建立一個mainifest文件
Rpm
激活能夠執行的rpm命令來構建一個linux的安裝文件。這個task目前僅使用在rpm支持的linux或者unix平臺。
SignJar
使用javasign命令行工具來給一個jar或者zip文件進行加簽。
Tar
建立一個tar壓縮包。
Unjar
解壓一個jar文件
Untar
解壓一個tar文件
Unwar
解壓一個war文件
Unzip
解壓一個zip文件
War
jar task的擴展,以web應用文件格式壓縮WEB-INF/lib,WEB-INF/classs等文件
Zip
建立一個zip文件
2. Audit/Coverage Tasks
JDepend :觸發一個JDepend 解析器。這個解析器變量一組java源文件目錄,產生符合設置標準的java包。
3. Compile Tasks
Depend
肯定相對於它們的源文件,哪些類文件是過時的,移除依賴於過時類的類文件,強制從新編譯移除後的類文件,一般和javac這個task一塊兒使用。
Javac
在運行的vm上或者設置了fork屬性的另外一個vm上編譯替代的源文件。
Apt
運行註釋處理器工具(apt).
JspC
運行jsp編譯器。
Runs the JSP compiler. (要了解 Weblogic JSP 編譯器, 參見 Wljspc task.)
NetRexxC
在運行的vm上編譯NetRexx 源碼樹。
Rmic
對於特定文件運行rmic編譯器。
Wljspc
使用weblogic jsp編譯器編譯jsp頁面,類weblogic.jspc (對於非Weblogic JSP編譯器, 參見JspC task.)
4. Deployment Tasks
ServerDeploy
針對特定的J2EE服務器,運行熱部署的task
5. Documentation Tasks
Javadoc/Javadoc2
使用javadoc工具產生一個代碼文件。javadoc2已通過期,使用javadoc task替換。
6. EJB Tasks
(參見關於EJB task相關描述的文檔)
7.執行Task
Ant
根據給定的構建文件運行ant。
AntCall
同一個構建文件,運行另一個target。
Apply/ExecOn
執行系統命令。
Dependset
這個task將一組源文件和一組target文件進行比較。若存在源文件新於target文件,將刪除全部的target文件。
Exec
執行系統命令。
Java
在運行的vm或者設置了fork屬性的另外一個vm上執行java類。
Parallel
一個容器task,能夠包含其它的task。在<parallel>標籤內嵌的task將運行本身單獨的線程。
Sequential
一個容器task,能夠包含其它的task。在<sequential>標籤內嵌的task安裝順序運行task。
Sleep
暫停執行特定時間的task。
Subant
對全部已定義的子構建調用指定target。
Waitfor
當一組特定條件知足時阻塞執行。
8. 文件Task
Attrib
改變特定目錄下的一個文件或者全部文件的權限屬性。當前,僅在windows下起效。
Checksum
爲一個文件或者一組文件產生一個檢測串,它能夠用來檢測文件的完整性。
Chgrp
改變特定目錄下一個文件或者全部文件的組別屬性。當前僅在unix有效。
Chmod
改變特定目錄下的一個文件或者全部文件的權限屬性。當前,僅在unix下起效,相似於unix的chmod命令。
Chown
改變特定目錄下的一個文件或者全部文件的屬主信息。當前,僅在unix下起效。
Concat
鏈接多個文件成爲一個文件。
Copy
賦值一個文件或者文件組到一個新的文件或者文件目錄。
Copydir
過時的。使用copy task替代它便可。
Copyfile
過時的。使用copy task替代它便可。
Delete
刪除特定目錄下的一個文件、全部文件、子目錄,或者刪除一個或者多個文件組的一組文件。
Deltree
過時的。使用Delete task替代它便可。
Filter
爲這個project設置一個字符過濾器或者從一個指定文件中讀取多個字符過濾器做爲過濾器。字符過濾器用在全部文件複製操做的task上。
FixCRLF
修改文件添加或刪除製表符,回車,換行,和EOF字符。
Get
根據URL獲取一個文件。
Mkdir
建立一個目錄。須要時,能夠建立不存在的父目錄。
Move
移動一個文件到新文件或者新的文件目錄,或者移動一組文件到新的文件目錄中。
Patch
將新文件替換就文件。
Rename
過時的. 使用Move task替代。
RenameExtensions
過時的. 使用Move task和一個全局映射器替代。
Replace
一個基於目錄的task,在選定的文件中用給定的字符串替換另一個字符串。
ReplaceRegExp
基於目錄的task,在選定的文件或者文件組中使用正則表達式替換字符。
Sync
同步兩個目錄樹。
Tempfile
產生一個臨時文件的名稱,並設置屬性到那個臨時文件名。
Touch
改變一個文件的修改時間或者建立一個新的文件。
9. Java2 Extensions Task
Jarlib-available
檢測擴展是否存在於文件組或者擴展組中。
Jarlib-display
顯示特定jar內包含的「可選包」及「包定義」。
Jarlib-manifest
產生一個定義全部依賴的manifest文件的task。
Jarlib-resolve
試圖定位一個jar來知足擴展,將jar的位置放到特定的屬性中。
10. Logging Tasks
Record
運行一個監聽器,記錄構建處理事件輸出到一個文件中。不一樣的記錄器能夠在同一時間退出。每一個記錄器對應一個文件。
11. Mail Tasks
發送SMTP郵件的task。
MimeMail
過時的。可使用Mail task來替換。
12. Miscellaneous Tasks
Defaultexcludes
在構建文件中,修改默認排除模式的組。
Echo
向控制檯或者文件輸出字符串。
Fail
經過跑出構建異常來退出當前構建。是否打印額外的信息是可選的。
GenKey
在keystore中產生一個key。
HostInfo
設置關於當前指定host或者當前host的屬性信息。
Input
運行在構建處理過程當中,經過控制顯示或者讀取控制輸入一行的消息來和用戶交互。
Script
執行腳本
Sound
根據構建成功或者失敗,在構建結束時播放音頻文件。
Splash
顯示一個splash屏
Sql
執行一組經過jdbc鏈接到數據的sql語句。這個sql語句要麼從src屬性下設置的文件中讀取,要麼是sql標籤封裝的語句。
Taskdef
爲當前project增長一個task定義,
添加一個task定義到當前project,使得這項新的task能夠用在當前的project。
TStamp
基於當前日期和時間,設置當前project的DSTAMP, TSTAMP,TODAY屬性。
Typedef
添加一個新的數據類定義到當前project,使得這項新的類型能夠用在當前的project中。
XmlValidate
檢查xml文件是否有效。
13. 預處理Task
ANTLR
激發一個語法文件的ANTLR轉換生成器。
AntStructure
給一個ant 構建文件產生一個DTD文件,改DTD文件包含了關於當前ant全部已知task的信息。
Import
引入另一個構建文件,改構建文件中的target可能被你本身的構建文件中的target覆蓋。
Include
包含另一個構建文件。
JavaCC
激發一個語法文件的 JavaCC compiler-compiler
Javah
根據一個java類產生JNI頭。
JJDoc
觸發 JavaCC compiler-compiler的JJDoc文件產生器。
JJTree
觸發 JavaCC compiler-compiler的JJTree預處理器。
Macrodef
定義一個新的基於其它task的task做爲宏。
Native2Ascii
將一個本地編碼的文件轉換爲使用escape編碼格式的ASCII碼文件。
Presetdef
根據一個已存在task的默認屬性值或者子元素定義一個新的task。
Translate
驗證在文件中被特殊字符分割的鍵,轉換成從資源束總讀取的值。
XSLT
經過XSLT處理一組文檔。
14. Property Tasks
Available
若運行時一個特定的文件、目錄、classpath下面的類或者JVM 系統資源是能夠獲取的,那麼能夠設置屬性。
Basename
設置一個指定的路徑的最後一個元素的屬性。
BuildNumber
用來跟蹤構建行數的task。
Condition
若特定的條件爲true,則設置屬性。它是Avaiable和uptodate的實現。
Dirname
對指定文件的值設置屬性,但不包含改路徑的最後元素。
Echoproperties
列舉當前的屬性。
LoadFile
將文件加載到一個屬性中。
LoadProperties
加載一個文件的內容做爲ant的屬性。這個task等同於使用<property file="..."/>,不一樣點事它支持嵌套<filterchain>元素,但不能在target外部定義。
MakeURL
根據一個文件、文件組或者路徑建立一個URL(url數組)。
PathConvert
Converts a nested path, path reference, filelist reference, or fileset reference to the form usable on a specified platform and/or to a list of items separated by the specified separator and stores the result in the specified property.
Property
在project中設置一個屬性(名稱和值)或者一組屬性(從文件或者資源上)
PropertyFile
建立或者修改屬性文件。適用在須要修改應用服務器或者一個應用的配置文件時。一般用在自動產生構建數目並保存到構建屬性文件中,或者對時間進行操做。
Uptodate
若指定文件新於一組源文件,則設置屬性。
Whichresource
查找類或者資源
XmlProperty
從一個格式化無缺的xml文件中加載屬性值。
15. Remote Tasks
FTP
集成了基本的ftp客戶端功能,實現發送,接受,列舉,刪除文件,建立文件的功能。
Rexec
自動建立一個遠程重執行回話的task。
Scp
使用ssh從一個遠程服務器讀取或者寫入文件。
setproxy
設置java web的代理屬性,從而運行在同一個虛擬機上的代碼和任務能夠穿越防火牆訪問遠程的web站點。
Sshexec
使用ssh在遠程服務器上執行excute命令
Telnet
自動鏈接一個遠程telnet回話的task,這個task使用嵌套的<read>和<write>標籤接收字符 串和發送字符串。
16. SCM Tasks
Cvs
處理來自cvs庫的包或者模塊。
CvsChangeLog
產生一個在cvs庫上變化記錄的xml報告。
CVSPass
在.cvspass文件中增長新的鍵。這種方式與cvs登錄命令上的效果相同。
CvsTagDiff
建立一個xml格式的報告文件,它記錄了在cvs庫上兩個分支或者日期上記錄的變化。
ClearCase
運行ClearCase cleartool 命令:checkin, checkout, uncheckout, update, lock, unlock, mklbtype, rmtype, mklabel, mkattr, mkdir, mkelem, mkbl的task。
Continuus/Synergy
運行Continuus命令ccmcheckin, ccmcheckout, ccmcheckintask, ccmreconfigure和ccmcreateTask的task
Microsoft Visual SourceSafe
運行可視化SourceSafe命令vssget, vsslabel, vsshistory, vsscheckin, vsscheckout, vssadd, vsscp, 和 vsscreate的task
Pvcs
運行用戶行pvcs庫提取最新版本的源代碼。
SourceOffSite
運行SourceOffSite命令sosget, soslabel, soscheckin, soscheckout的task。
17. Testing Tasks
Junit
運行Junit測試框架的測試用例。這個task已經在Junit3.0到Junit3.7版本上進行了測試。但不支持Junit3 之前的版本。
JunitReport
合併Junit task產生的單獨的xml文件,應用到styleSheet形式文檔,提供給用戶一個能夠瀏覽查看測試用例結果的文檔。
/org/apache/tools/ant/taskdefs/default.properties文件將task和源碼關聯到一塊兒。
# standard ant tasks ant=org.apache.tools.ant.taskdefs.Ant antcall=org.apache.tools.ant.taskdefs.CallTarget antstructure=org.apache.tools.ant.taskdefs.AntStructure antversion=org.apache.tools.ant.taskdefs.condition.AntVersion apply=org.apache.tools.ant.taskdefs.Transform apt=org.apache.tools.ant.taskdefs.Apt attributenamespacedef=org.apache.tools.ant.taskdefs.AttributeNamespaceDef augment=org.apache.tools.ant.taskdefs.AugmentReference available=org.apache.tools.ant.taskdefs.Available basename=org.apache.tools.ant.taskdefs.Basename bindtargets=org.apache.tools.ant.taskdefs.BindTargets buildnumber=org.apache.tools.ant.taskdefs.BuildNumber bunzip2=org.apache.tools.ant.taskdefs.BUnzip2 bzip2=org.apache.tools.ant.taskdefs.BZip2 checksum=org.apache.tools.ant.taskdefs.Checksum chmod=org.apache.tools.ant.taskdefs.Chmod classloader=org.apache.tools.ant.taskdefs.Classloader commandlauncher=org.apache.tools.ant.taskdefs.CommandLauncherTask componentdef=org.apache.tools.ant.taskdefs.Componentdef concat=org.apache.tools.ant.taskdefs.Concat condition=org.apache.tools.ant.taskdefs.ConditionTask copy=org.apache.tools.ant.taskdefs.Copy cvs=org.apache.tools.ant.taskdefs.Cvs cvschangelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask cvspass=org.apache.tools.ant.taskdefs.CVSPass cvstagdiff=org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff cvsversion=org.apache.tools.ant.taskdefs.cvslib.CvsVersion defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes delete=org.apache.tools.ant.taskdefs.Delete dependset=org.apache.tools.ant.taskdefs.DependSet diagnostics=org.apache.tools.ant.taskdefs.DiagnosticsTask dirname=org.apache.tools.ant.taskdefs.Dirname ear=org.apache.tools.ant.taskdefs.Ear echo=org.apache.tools.ant.taskdefs.Echo echoproperties=org.apache.tools.ant.taskdefs.optional.EchoProperties echoxml=org.apache.tools.ant.taskdefs.EchoXML exec=org.apache.tools.ant.taskdefs.ExecTask fail=org.apache.tools.ant.taskdefs.Exit filter=org.apache.tools.ant.taskdefs.Filter fixcrlf=org.apache.tools.ant.taskdefs.FixCRLF #funtest=org.apache.tools.ant.taskdefs.optional.testing.Funtest genkey=org.apache.tools.ant.taskdefs.GenerateKey get=org.apache.tools.ant.taskdefs.Get gunzip=org.apache.tools.ant.taskdefs.GUnzip gzip=org.apache.tools.ant.taskdefs.GZip hostinfo=org.apache.tools.ant.taskdefs.HostInfo import=org.apache.tools.ant.taskdefs.ImportTask include=org.apache.tools.ant.taskdefs.ImportTask input=org.apache.tools.ant.taskdefs.Input jar=org.apache.tools.ant.taskdefs.Jar java=org.apache.tools.ant.taskdefs.Java javac=org.apache.tools.ant.taskdefs.Javac javadoc=org.apache.tools.ant.taskdefs.Javadoc length=org.apache.tools.ant.taskdefs.Length loadfile=org.apache.tools.ant.taskdefs.LoadFile loadproperties=org.apache.tools.ant.taskdefs.LoadProperties loadresource=org.apache.tools.ant.taskdefs.LoadResource local=org.apache.tools.ant.taskdefs.Local macrodef=org.apache.tools.ant.taskdefs.MacroDef mail=org.apache.tools.ant.taskdefs.email.EmailTask makeurl=org.apache.tools.ant.taskdefs.MakeUrl manifest=org.apache.tools.ant.taskdefs.ManifestTask manifestclasspath=org.apache.tools.ant.taskdefs.ManifestClassPath mkdir=org.apache.tools.ant.taskdefs.Mkdir move=org.apache.tools.ant.taskdefs.Move nice=org.apache.tools.ant.taskdefs.Nice parallel=org.apache.tools.ant.taskdefs.Parallel patch=org.apache.tools.ant.taskdefs.Patch pathconvert=org.apache.tools.ant.taskdefs.PathConvert presetdef=org.apache.tools.ant.taskdefs.PreSetDef projecthelper=org.apache.tools.ant.taskdefs.ProjectHelperTask property=org.apache.tools.ant.taskdefs.Property propertyhelper=org.apache.tools.ant.taskdefs.PropertyHelperTask record=org.apache.tools.ant.taskdefs.Recorder replace=org.apache.tools.ant.taskdefs.Replace resourcecount=org.apache.tools.ant.taskdefs.ResourceCount retry=org.apache.tools.ant.taskdefs.Retry rmic=org.apache.tools.ant.taskdefs.Rmic sequential=org.apache.tools.ant.taskdefs.Sequential signjar=org.apache.tools.ant.taskdefs.SignJar sleep=org.apache.tools.ant.taskdefs.Sleep sql=org.apache.tools.ant.taskdefs.SQLExec subant=org.apache.tools.ant.taskdefs.SubAnt sync=org.apache.tools.ant.taskdefs.Sync tar=org.apache.tools.ant.taskdefs.Tar taskdef=org.apache.tools.ant.taskdefs.Taskdef tempfile=org.apache.tools.ant.taskdefs.TempFile touch=org.apache.tools.ant.taskdefs.Touch tstamp=org.apache.tools.ant.taskdefs.Tstamp truncate=org.apache.tools.ant.taskdefs.Truncate typedef=org.apache.tools.ant.taskdefs.Typedef unjar=org.apache.tools.ant.taskdefs.Expand untar=org.apache.tools.ant.taskdefs.Untar unwar=org.apache.tools.ant.taskdefs.Expand unzip=org.apache.tools.ant.taskdefs.Expand uptodate=org.apache.tools.ant.taskdefs.UpToDate waitfor=org.apache.tools.ant.taskdefs.WaitFor war=org.apache.tools.ant.taskdefs.War whichresource=org.apache.tools.ant.taskdefs.WhichResource xmlproperty=org.apache.tools.ant.taskdefs.XmlProperty xslt=org.apache.tools.ant.taskdefs.XSLTProcess zip=org.apache.tools.ant.taskdefs.Zip # optional tasks antlr=org.apache.tools.ant.taskdefs.optional.ANTLR attrib=org.apache.tools.ant.taskdefs.optional.windows.Attrib blgenclient=org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient cab=org.apache.tools.ant.taskdefs.optional.Cab cccheckin=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout cclock=org.apache.tools.ant.taskdefs.optional.clearcase.CCLock ccmcheckin=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckin ccmcheckintask=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckinDefault ccmcheckout=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckout ccmcreatetask=org.apache.tools.ant.taskdefs.optional.ccm.CCMCreateTask ccmkattr=org.apache.tools.ant.taskdefs.optional.clearcase.CCMkattr ccmkbl=org.apache.tools.ant.taskdefs.optional.clearcase.CCMkbl ccmkdir=org.apache.tools.ant.taskdefs.optional.clearcase.CCMkdir ccmkelem=org.apache.tools.ant.taskdefs.optional.clearcase.CCMkelem ccmklabel=org.apache.tools.ant.taskdefs.optional.clearcase.CCMklabel ccmklbtype=org.apache.tools.ant.taskdefs.optional.clearcase.CCMklbtype ccmreconfigure=org.apache.tools.ant.taskdefs.optional.ccm.CCMReconfigure ccrmtype=org.apache.tools.ant.taskdefs.optional.clearcase.CCRmtype ccuncheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout ccunlock=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnlock ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate chgrp=org.apache.tools.ant.taskdefs.optional.unix.Chgrp chown=org.apache.tools.ant.taskdefs.optional.unix.Chown depend=org.apache.tools.ant.taskdefs.optional.depend.Depend ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar ftp=org.apache.tools.ant.taskdefs.optional.net.FTP image=org.apache.tools.ant.taskdefs.optional.image.Image iplanet-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask jarlib-available=org.apache.tools.ant.taskdefs.optional.extension.JarLibAvailableTask jarlib-display=org.apache.tools.ant.taskdefs.optional.extension.JarLibDisplayTask jarlib-manifest=org.apache.tools.ant.taskdefs.optional.extension.JarLibManifestTask jarlib-resolve=org.apache.tools.ant.taskdefs.optional.extension.JarLibResolveTask javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC javah=org.apache.tools.ant.taskdefs.optional.Javah jdepend=org.apache.tools.ant.taskdefs.optional.jdepend.JDependTask jjdoc=org.apache.tools.ant.taskdefs.optional.javacc.JJDoc jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree junit=org.apache.tools.ant.taskdefs.optional.junit.JUnitTask junitreport=org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC propertyfile=org.apache.tools.ant.taskdefs.optional.PropertyFile pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs replaceregexp=org.apache.tools.ant.taskdefs.optional.ReplaceRegExp rexec=org.apache.tools.ant.taskdefs.optional.net.RExecTask rpm=org.apache.tools.ant.taskdefs.optional.Rpm schemavalidate=org.apache.tools.ant.taskdefs.optional.SchemaValidate scp=org.apache.tools.ant.taskdefs.optional.ssh.Scp script=org.apache.tools.ant.taskdefs.optional.Script scriptdef=org.apache.tools.ant.taskdefs.optional.script.ScriptDef serverdeploy=org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy setproxy=org.apache.tools.ant.taskdefs.optional.net.SetProxy soscheckin=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin soscheckout=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout sosget=org.apache.tools.ant.taskdefs.optional.sos.SOSGet soslabel=org.apache.tools.ant.taskdefs.optional.sos.SOSLabel sound=org.apache.tools.ant.taskdefs.optional.sound.SoundTask splash=org.apache.tools.ant.taskdefs.optional.splash.SplashTask sshexec=org.apache.tools.ant.taskdefs.optional.ssh.SSHExec sshsession=org.apache.tools.ant.taskdefs.optional.ssh.SSHSession symlink=org.apache.tools.ant.taskdefs.optional.unix.Symlink telnet=org.apache.tools.ant.taskdefs.optional.net.TelnetTask translate=org.apache.tools.ant.taskdefs.optional.i18n.Translate verifyjar=org.apache.tools.ant.taskdefs.VerifyJar vssadd=org.apache.tools.ant.taskdefs.optional.vss.MSVSSADD vsscheckin=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN vsscheckout=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT vsscp=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCP vsscreate=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCREATE vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET vsshistory=org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc xmlvalidate=org.apache.tools.ant.taskdefs.optional.XMLValidateTask # deprecated ant tasks (kept for back compatibility) copydir=org.apache.tools.ant.taskdefs.Copydir copyfile=org.apache.tools.ant.taskdefs.Copyfile copypath=org.apache.tools.ant.taskdefs.CopyPath deltree=org.apache.tools.ant.taskdefs.Deltree execon=org.apache.tools.ant.taskdefs.ExecuteOn javadoc2=org.apache.tools.ant.taskdefs.Javadoc jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask jspc=org.apache.tools.ant.taskdefs.optional.jsp.JspC mimemail=org.apache.tools.ant.taskdefs.optional.net.MimeMail rename=org.apache.tools.ant.taskdefs.Rename renameext=org.apache.tools.ant.taskdefs.optional.RenameExtensions style=org.apache.tools.ant.taskdefs.XSLTProcess
ant將全部的task都封裝一塊兒,它們繼承了Task類,經過DispatchUtils 將task進行分發,ComponentHelper來產生task。
public Task createTask(String taskType) throws BuildException { Task task = createNewTask(taskType); if (task == null && taskType.equals(ANT_PROPERTY_TASK)) { // quick fix for Ant.java use of property before // initializing the project addTaskDefinition(ANT_PROPERTY_TASK, org.apache.tools.ant.taskdefs.Property.class); task = createNewTask(taskType); } return task; }
參考資料:
http://www.exubero.com/ant/antintro-s5.html
https://ant.apache.org/manual/tasksoverview.html