從源碼角度深刻分析ant

 

Ant的基本概念

 

首先是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執行流程

接下來,咱們分享一下ant解析配置文件buildtasks的順序流程:

 

 

 Ant核心之Task

 從上面的解析咱們能夠看到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

Mail

發送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

相關文章
相關標籤/搜索