ANT学习笔记.docx
- 文档编号:23141433
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:22
- 大小:25.83KB
ANT学习笔记.docx
《ANT学习笔记.docx》由会员分享,可在线阅读,更多相关《ANT学习笔记.docx(22页珍藏版)》请在冰豆网上搜索。
ANT学习笔记
关于ANT的起源,最权威的莫过于官方站点:
:
:
URL:
:
http:
//ant.apache.org
下面是我的学习笔记,主要是对些关键的地方的总结,还有就是一些我个人觉得比较有难度和技巧的地方的总结。
首先是一些在使用ant前应该思考的问题,基本上这些问题的答案可以指导你怎么样用好ant
buildfile怎么开始
在build过程中我需要定义哪些property和datatype
build过程中需要创建哪些目录
谁负责一个完整的创建,还有库文件,安装和运行的脚本文件,以及静态的和生成的动态的文档?
如果文件发生了变化,怎么重建?
是否需要删除所有的class文件?
是否需要删除生成的jar文件?
哪些目录应该在发布前准备好?
是否需要将源码和应用一起发布?
谁负责发布?
一、ANT的安装和配置(略)
二、ANT入门(略)
三、ANT的学习方法
学习ANT应该从“到底要用ANT来做什么”开始,针对自己的目的来学习,只要能够满足自己的工作的需要就可以了,ANT设计为可扩展的插件式的结构,每天都有人为ANT增加新的插件,因此要将ANT的所有应用掌握是不可能的,从我们的工作需求出发,ANT主要就是用来compile,test,build,package,deloy,integrationtest,这也是我使用ANT的一种模式,我已经为这个模式写了一个模板,每次编写新的ANT的时候只需要针对具体的项目把这个模板修改一下就可以了,其实使用ANT是很简单的。
使用来build项目有两个需要重点关注的地方:
项目的组织和ANT的buildfile。
四、buildfile的结构
对于ANT的使用者来说,理解ANT的配置文件是最重要的,ANT的XML配置文件的结构很简单,这也是ANT的一个优点,简单易懂,容易上手,ANT的配置文件主要由project,target和task三层树型结构组成如下:
--这是一个虚拟的task,具体到应用可能是ant的coretask也可能是optionaltask-->
关于project,target,task的概念,请参考官方文档的6UsingAnt部分。
五、ANT的DataType
前面说到了ANT的配置文件的结构主要由project,target和task组成,其实project,target和task是ANT的四个重要的概念里面的三个,还有一个很重要的概念就是DataElements,这是ANT最容易让人搞不清楚的一个方面,它们表达的是数据而不是任务。
数据类型定义包括三个级别,project-level,target-level和task-level,有点类似于类里面定义全局变量,局部变量的方式,不同的是,这里代表了其在ant里面的可视性,如果直接定义在project节点下那就是project-level,所有的target和task都可以引用它们,以次类推。
数据类型分为两个部分:
property和DataType。
property:
DataType:
用于表示一套复杂的数据集,例如FileSet和Path
数据类型的定义通常和target平级,也就是是数据类型一般直接在project下一层定义,当然也有一些直接定义在task里面,通常我们定义在和target平级的时候,可以在task下面引用这些数据类型。
总结ANT的数据类型如下:
argument参数:
从命令行传递到buildfile的参数
environment环境变量:
传递到buildfile的环境变量
filelist文件列表:
文件不一定存在
fileset文件集:
文件必须存在
patternset模式集
filterset过滤集
path路径,还有classpath
mapper映射:
定义了输入与输出文件之间的一套复杂的关系。
ANT的数据类型很多,以上列出的是一些常用的数据类型,下面重点总结一些我自己常用的数据类型,如environment,fileset,patternset,path
1、property属性
一个项目可以配置很多property,property可以在在buildfile里面设置,也是可以在外部设置,在task中可以引用property,通过'{'和'}'符号来引用
ANT属性的定义原则是取第一次定义的值,也就是说相同的属性,定义了多次,只有第一次定义的值是有效的。
例如:
#override.properties
test=first
--buildfile-->
因为override.properties文件中已经设置了test的值,所以在buildfile里面第二次设置的值是无效的,test的值仍然是first
build-inproperties
ANT提供了访问系统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\bin
java.vm.version=1.3.1_03-b03
java.vm.vendor=SunMicrosystemsInc.
java.vendor.url=:
:
URL:
:
path.separator=;
java.vm.name=JavaHotSpot(TM)ClientVM
file.encoding.pkg=sun.io
java.vm.specification.name=JavaVirtualMachineSpecification
user.dir=G:
\server
java.runtime.version=1.3.1_03-b03
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
os.arch=x86
java.io.tmpdir=C:
\TMP\
line.separator=
java.vm.specification.vendor=SunMicrosystemsInc.
java.awt.fonts=
os.name=Windows2000
java.library.path=D:
\jdk1.3.1_03\bin;.;C:
\WINNT\system3...
java.specification.name=JavaPlatformAPISpecification
java.class.version=47.0
os.version=5.0
user.home=C:
\DocumentsandSettings\anonymous
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=GBK
java.specification.version=1.3
user.name=anonymous
java.class.path=D:
\eclipse2.1.2\plugins\org.eclipse.j...
java.vm.specification.version=1.0
java.home=D:
\jdk1.3.1_03\jre
user.language=zh
java.specification.vendor=SunMicrosystemsInc.
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=interpretedmode
java.version=1.3.1_03
java.ext.dirs=D:
\jdk1.3.1_03\jre\lib\ext
sun.boot.class.path=D:
\jdk1.3.1_03\jre\lib\rt.jar;D:
\jdk1...
java.vendor=SunMicrosystemsInc.
file.separator=\
java.vendor.url.bug=:
:
URL:
:
cgi-bin/bugreport...
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
user.region=CN
sun.cpu.isalist=pentiumi486i386
这些build-inproperties可以直接象引用properties那样,例如:
{java.home}
除此之外,ANT还提供了自身的build-inproperties:
basedir
ant.file
ant.version
ant.project.name
ant.java.version
2、Environment环境变量
假设你根据你的工作环境配置了下面的property:
/java/xalan-j_2_1_0"/> 显然你的buildfile到其他开发人员的环境下面能够成功运行的可能性很小,因为其他人的xalan很可能在其他目录,使用Environment环境变量可以解决这个问题 "/> 关键是: 设置了这个属性之后,以后可以直接引用环境变量,只要前面加一个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支持以下常用的属性(casesensitive,defaultexcludes请查阅官方文档): dir必须指定,用于指定文件所在的目录 excludes可选,用于指定在dir指定的目录下那些不应该包括进来的文件,内容是逗号分割的文件模式(filepattern)。 excludesfile跟excludes类似,区别是只能包括一个模式,通常情况下我习惯使用excludes,因为excludes也包括了excludesfile的功能 includes可选,用于指定在dir指定的目录下那些需要包括进来的文件,内容是逗号分割的文件模式(filepattern)。 includesfile跟includes类似,区别是只能包括一个模式,通常情况下我习惯使用includes,因为includes也包括了includesfile的功能 除了上面的属性之外,fileset还可以嵌套多个(或0个)以下的patternset元素 关于patternset的用法,我会在patternset这个部分专门总结。 例子: 等价于 等价于 也等价于 --laterinthesamebuildfile--> 4、patternset模式集 fileset将文件合成一个组,patternset将模式合成一个组,它们的概念很接近,其实fileset依赖于patternset来选择文件,patternset可以表达为target-level,然后通过它的id来引用,也可以直接嵌套在fileset下面,那些支持隐式(implicit)的fileset的task也支持嵌套的patternset。 patternset支持includes,excludes,includesfile,excludesfile四个属性,这跟fileset的用法一样,还支持以下的嵌套的元素: 0..n个嵌套的 name必须指定,内容为相应的include和exclude的模式。 if 可选,和target的if属性的用法一样 unless可选,和target的unless属性的用法一样 0..n个嵌套的 name必须指定,内容为相应的include和exclude的模式,但是只能是单个 if可选,和target的if属性的用法一样 unless可选,和target的unless属性的用法一样 例子: patternset的定义 patternset的引用 5、path路径 path这个DataType可以是attribute也可以是一个嵌套的元素,最常用的是classpath这个形式,但是也用于其他用途。 当作为XML元素使用的时候,path的用法非常的灵活,path支持以下attribute location可选,表示单个文件或者单个路径,它跟path的区别是数量上的,path可以表示多个文件和路径 path可选,路径或者文件列表,用;或者: 作为分隔符 refid可选,引用其他的path的id,如果在buildfile里面会经常用到同样的path,可以将其定义为一个公用的,然后在使用到这个path的地方通过refid来引用,如果refid被指定了,path的其他attribute和其嵌套的元素都是禁止使用的。 path支持的嵌套元素如下: 0..n个嵌套的 0..n个嵌套的 0..n个嵌套的 classpath是path元素的一个针对类路径的特殊的元素,具有和path用样的使用语法,但是使用的场合主要是 例子: 等价于 等价于 六、目标驱动ANT 为什么说目标驱动ANT呢,这其实是我的学习方法,也就是说我使用ANT来做什么,而“做什么”就是我们的目标,也就是buildfile里面的target,只学习跟我们的目标有关的部分,其他的留到用的时候查阅有关资料,现学现卖,我学习ANT的目的是为了更好的辅助我的项目的创建,而不是要成为ANT的专家。 就我目前的工作内容出发,我需要ANT协助我完成编译,测试,打包,发布,生成文档,有些时候,还会使用到版本控制系统。 组织一个良好的目录结构是完成一次成功的build所必须的,apache的开源项目的目录结构提供了事实上(defacto)的标准,如非特殊需要,我们可以直接采取那样的目录结构。 project_home #项目所在目录 \src #源码 \java #Java主程序代码 \test #Java测试程序代码 \conf #manifest声明文件 \lib #库文件目录 \doc #项目有关说明文档,如果是开源项目,通常该目录下是相应的webcontent \api #生成项目的JavaAPI文档的地方 \build #用于创建的临时目录 \classes#编译的结果保存在该目录 \dist #用于发布的临时目录,通常会将build\classes下的文件打包成jar,保存在该目录下 README #项目的说明文件 RELEASE #项目的发布文件 LICENSE #项目的license文件 下面是一个和目录有关的配置的例子: --thefollowing targetsareignored--> 编译 1。 编译器的选择 对于 jikes,jvc,kjc,gcj,sj等等,不过我还没有用过这些编译器, --使用jikes编译器--> 2。 编译可以说是ANT里面最基本的任务,首先回顾一下命令行下进行编译的命令: c: \hellworld>javac-dbuild\classes -classp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ANT 学习 笔记