zoukankan      html  css  js  c++  java
  • 从源码角度深入分析 ant

    [转自] 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


  • 相关阅读:
    DOS命令大全 1 attrib,delete等 外部 内部 命令都有
    css图像映射
    简单的css样式控制分页效果
    (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?
    学习笔记ADO.Net方面
    一个挺好用的数据库操作类
    .net开发人员应该知道(二)
    js与C#之间相互调用的一些方法
    JS 事件大全
    .net开发人员应该知道(一)
  • 原文地址:https://www.cnblogs.com/pekkle/p/6568734.html
Copyright © 2011-2022 走看看