[转自] http://www.tuicool.com/articles/eQvIRbA

Ant的基本概念

首先是ant的基本概念: Project,Target,Tasks,Properties,Paths

1.Project

<project> build.xml文件最顶层的元素,它有三个可选的属性:

名称(name):工程的名称

默认(default):默认的目标(target)。

基础目录(basedir):工程的根目录,工程所有的相对路径从此算起。

2. target

每个project定义了0个或者多个target,是project的次级目录。

一个target是一组要执行的task组成的。

当启动ant时,可以选择你想要执行的target,如果没有指定,就执行project的属性default定义的target。

可以依据条件(使用IF/UNLESS)来决定是否执行。一个target的执行可以依赖另一个target。

target的依赖是可以传递的。依赖的target先执行。例如:

<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,最后才是D

3.Task

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 解析配置文件 build 为 tasks 的顺序流程:

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压缩一组文件

Jlink过期的. 使用jar或者zip task中的zipfileset和zipgroupfileset属性替代.

Manifest

创建一个mainifest文件

Rpm

激活可以执行的rpm命令来构建一个linux的安装文件。这个task目前仅使用在rpm支持的linux或者unix平台。

SignJar

使用javasign命令行工具来给一个jar或者zip文件进行加签。

Unjar

解压一个jar文件

War

jar task的扩展,以web应用文件格式压缩WEB-INF/lib,WEB-INF/classs等文件

2. Audit/Coverage Tasks

JDepend :触发一个JDepend 解析器。这个解析器变量一组java源文件目录,产生符合设置标准的java包。

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.)

ServerDeploy

针对特定的J2EE服务器,运行热部署的task

5. Documentation Tasks

Javadoc/Javadoc2

使用javadoc工具产生一个代码文件。javadoc2已经过期,使用javadoc task替换。

6. EJB Tasks

(参见关于EJB 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

当一组特定条件满足时阻塞执行。

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的位置放到特定的属性中。

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文件是否有效。

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处理一组文档。

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文件中加载属性值。

FTP

集成了基本的ftp客户端功能,实现发送,接受,列举,删除文件,创建文件的功能。

Rexec

自动创建一个远程重执行回话的task。

Scp

使用ssh从一个远程服务器读取或者写入文件。

setproxy

设置java web的代理属性,从而运行在同一个虚拟机上的代码和任务可以穿越防火墙访问远程的web站点。

Sshexec

使用ssh在远程服务器上执行excute命令

Telnet

自动连接一个远程telnet回话的task,这个task使用嵌套的<read>和<write>标签接收字符 串和发送字符串。

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。

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

从源码角度深入分析 ant的更多相关文章

  1. 从源码角度深入分析ant

    Ant的基本概念 首先是ant的基本概念:Project,Target,Tasks,Properties,Paths 1.Project <project> build.xml文件最顶层的 ...

  2. 从源码角度深入分析log4j配置文件使用

    log4j在日常开发中经常使用,但有时候对 配置文件应该放到什么位置有疑惑.现在我们通过从代码的角度来看待这个问题, 看完后你也许会恍然大悟哦. 开始吧. Log4j的组成及架构: Log4j由三个重 ...

  3. 从源码角度深入理解Toast

    Toast这个东西我们在开发中经常用到,使用也很简单,一行代码就能搞定: 1: Toast.makeText(", Toast.LENGTH_LONG).show(); 但是我们经常会遇到这 ...

  4. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  5. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

  6. 从源码角度入手实现RecyclerView的Item点击事件

    RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是 ...

  7. 从template到DOM(Vue.js源码角度看内部运行机制)

    写在前面 这篇文章算是对最近写的一系列Vue.js源码的文章(https://github.com/answershuto/learnVue)的总结吧,在阅读源码的过程中也确实受益匪浅,希望自己的这些 ...

  8. Android布局性能优化—从源码角度看ViewStub延迟加载技术

    在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码 ...

  9. Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

    上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底 ...

随机推荐

  1. Django--form保存用户输入内容

    需求 用户提交form时,如果报错,页面中的用户信息还在(除了密码),没有被刷新掉,不用用户再次输入. 速查 views.py 1 2 3 def login(request):     obj = ...

  2. 跨域问题hbuilder

    1.借助jquery-jsonp插件 $.jsonp({ url: url, data: { 'name': usd, 'passwd': pass }, callbackParameter: &qu ...

  3. css总结11:css的overflow问题

    1 排版时经常遇到块级元素内容overflow,怎么妥当处理是一个关键. overflow的常用属性:  代码: <!DOCTYPE html><html lang="en ...

  4. (转)那天有个小孩教我WCF[一][1/3]

    原文地址:http://www.cnblogs.com/AaronYang/p/2950931.html 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不 ...

  5. 转Delphi中XLSReadWrite控件的使用(3) 读和写Excel

    unit OpExcell; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...

  6. 使用Sencha Cmd创建脚本框架

    从Ext JS 4.1.1a 开始,为了配合 Sencha Touch开发  而设计了 Sencha Cmd这个跨平台的命令行工具. 要使用Sencha Cmd,必须先安装好 Java Run-tim ...

  7. 观察者(Observer)模式 * 委托事件

    观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象.   这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subje ...

  8. 模板方法(Template Method)模式

    /* * 抽象模版(AbstractClass)角色有如下的责任: 定义了一个或多个抽象操作,以便让子类实现.这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤. 定义并实现了一个模版方法.这个模 ...

  9. OpenResty 最佳实践 (2)

    此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. lua 协程与 nginx 事件机制结合 文章前部分用大量篇幅阐述了 lua 和 nginx 的相关知识,包 ...

  10. 「POJ 1741」Tree

    题面: Tree Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define ...