您好,欢迎访问三七文档
ANT从入门到精通分类:转载亦无碍2010-08-3023:10100人阅读评论(0)收藏举报一、ANT的安装和配置(略,参考《ant实践》吧)二、ANT的学习方法学习ANT应该从“到底要用ANT来做什么”开始,针对自己的目的来学习,只要能够满足自己的工作的需要就可以了,ANT设计为可扩展的插件式的结构,每天都有人为ANT增加新的插件,因此要将ANT的所有功能掌握是不可能的,从我们的工作需求出发,ANT主要就是用来compile,test,build,package,deloy,integrationtest,这也是我使用ANT的一种固定方式,我已经为这个固定的方式写了一个模板,每次编写新的ANT的时候只需要针对具体的项目把这个模板修改一下就可以了,其实使用ANT是很简单的,如果ant很复杂和难于使用,相信也不会有如此的popular。三、buildfile的结构对于ANT的使用者来说,理解ANT的配置文件是最重要的,ANT的XML配置文件的结构很简单,这也是ANT的一个优点,简单易懂,容易上手,ANT的配置文件主要由project,target和task三层树型结构组成如下:projectname=helloworlddefault=masterpropertyname=value=/targetname=mastertaskattribute1=attribute2=/!--这是一个虚拟的task,具体到应用可能是ant的coretask也可能是optionaltask--/target/project关于project,target,task的概念,请参考官方文档的6UsingAnt部分。四、ANT的DataType前面说到了ANT的配置文件的结构主要由project,target和task组成,其实project,target和task是ANT的四个重要的概念里面的三个,还有一个很重要的概念就是DataElements(数据类型),这是ANT最容易让人搞不清楚的一个方面,它们表达的是数据而不是任务。数据类型定义包括三个级别,project-level,target-level和task-level,有点类似于类里面定义全局变量,局部变量的方式,不同的是,这里代表了其在antbuildfile里面的可视性,如果直接定义在project节点下那就是project-level,所有的target和task都可以引用它们,以次类推。数据类型分为两个部分:property和DataType。property:property/标签里定义了name-value对。DataType:用于表示一套复杂的数据集,例如FileSet和Path数据类型的定义通常和target平级,也就是是数据类型一般直接在project下一层定义,当然也有一些直接定义在task里面,通常我们定义的数据类型和target平级的时候,可以在task下面引用这些数据类型。总结ANT的数据类型如下:argument参数:从命令行传递到buildfile的参数environment环境变量:传递到buildfile的环境变量filelist文件列表:文件不一定存在fileset文件集:文件必须存在patternset模式集filterset过滤集path路径,还有classpathmapper映射:定义了输入与输出文件之间的一套复杂的关系。ANT的数据类型很多,以上列出的是一些常用的数据类型,下面重点总结一些我自己常用的数据类型,如environment,fileset,patternset,path1、property属性一个项目可以配置很多property,property可以在在buildfile里面设置,也是可以在外部设置,在task中可以引用property,通过'${'和'}'符号来引用除了常见的在buildfile里面定义属性外,很多情况下可以定义一个.properties文件,然后在buildfile里面load这个文件,这样的好处是可以让buildfile不用修改的就在不同的环境里面运行,用户提供自己的.properties文件就可以了例如,我们定义了一个build.properties文件#build.propertiesextend.1.dir=extend.2.dir=然后在buildfile里面load这个build.properties文件,在后面就可以直接引用该文件里定义的所有属性了。propertyfile=build.propertiesANT属性的定义原则是先定义的有效,也就是说相同的属性,定义了多次,只有第一次定义的值是有效的,例如:#override.propertiestest=first!--buildfile--propertyfile=override.properties/propertyname=testvalue=second/因为override.properties文件中已经设置了test的值,所以在buildfile里面第二次设置的值是无效的,test的值仍然是firstbuild-inpropertiesANT提供了访问系统properties的机制,也就是build-inproperites,所谓系统properties,可以查看System.getProperties返回的值,以下是我的机器上的系统properties(只列出了一部分)--listingproperties--java.runtime.name=Java(TM)2RuntimeEnvironment,Stand...sun.boot.library.path=D:/jdk1.3.1_03/jre/binjava.vm.version=1.3.1_03-b03java.vm.vendor=SunMicrosystemsInc.java.vendor.url==;java.vm.name=JavaHotSpot(TM)ClientVMfile.encoding.pkg=sun.iojava.vm.specification.name=JavaVirtualMachineSpecificationuser.dir=G:/serverjava.runtime.version=1.3.1_03-b03java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironmentos.arch=x86java.io.tmpdir=C:/TMP/line.separator=这些build-inproperties可以直接象property那样引用,例如:${java.home}除此之外,ANT还提供了自身的build-inproperties:basedirant.fileant.versionant.project.nameant.java.version2、Environment环境变量假设你根据你的工作环境配置了下面的property:propertyname=xalan.homevalue=C:/java/xalan-j_2_1_0/显然你的buildfile到其他开发人员的环境下面还能继续有效的可能性很小,因为其他人的xalan很可能在其他目录,使用Environment环境变量可以解决这个问题propertyenvironment=env/propertyname=xalan.homevalue=${env.XALAN_HOME}/targetname=checkXalanHomeunless=env.XALAN_HOMEfailmessage=XALAN_HOMEmustbeset!//target关键是:propertyenvironment=env/设置了这个属性之后,以后可以直接引用环境变量,只要前面加一个env.的前缀就可以了。3、fileset文件集fileset表示了一套文件的集合,通常定义为project-level,ANT的task可以通过显式(explicit)的方式来引用或者直接嵌套fileset,如果是直接嵌套,这个时候fileset是task-level的,很多ANT的task都支持隐式(implicit)的fileset,也就是说这些TASK支持fileset的所有属性和嵌套的子元素,和filelist不同的是fileset所表示的文件必须存在。Fileset可以定义为target-level的,并通过他们的id来引用。fileset支持以下常用的属性(只列出常用的,其他的请参考官方文档):attribute|description----------------|------------------------------------------------id|可选,定义了id将来就可以引用了dir|必须指定,用于指定文件所在的目录excludes|可选,用于指定在dir指定的目录下那些不应该包括进来的文件,内容是逗号分割的文件模式(filepattern)。excludesfile|跟excludes类似,区别是只能包括单独的文件模式(不能用逗号分隔多个文件模式),通常情况下我习惯使用excludes,因为excludes也包括了excludesfile的功能includes|可选,用于指定在dir指定的目录下那些需要包括进来的文件,内容是逗号分割的文件模式(filepattern)。includesfile|跟includes类似,区别是只能包括单独的文件模式(不能用逗号分隔多个文件模式),通常情况下我习惯使用includes,因为includes也包括了includesfile的功能除了上面的属性之外,fileset还可以嵌套多个(0...n)以下的patternset元素exclude,include,patternset,excludesfile,includesfile.关于patternset的用法,我会在patternset这个部分专门总结。例子:filesetid=sources1dir=srcincludes=**/*.javaexcludes=**/test/**/*.java/fileset等价于filesetid=sources2dir=srcincludename=**/*.java/excludename=**/test/**/*.java//fileset等价于filesetid=sources3dir=srcpatternsetincludename=**/*.java/excludename=**/test/**/*.java//patternset/fileset也等价于patternsetid=non.test.sourceincludename=**/*.java/excludename=**/test/**/*.java//patternset!--laterinthesamebuildfile--filesetid=sources4dir=srcpatternsetrefid=non.test.source//fileset4、patternset模式集fileset将文件合成一个组,patternset将模式合成一个组,它们的概念很接近,其实fileset依赖于patternset来选择文件,patternset可以表达为target-level,然后通过它的id来引用,也可以直接嵌套在fileset下面,那些支持隐式(implicit)的fileset的task也支持嵌套的patternset。patternset支持includes,excludes,includ
本文标题:ant入门到精通
链接地址:https://www.777doc.com/doc-6372745 .html