Java的Build工具Ant.docx
- 文档编号:11209090
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:26
- 大小:280.54KB
Java的Build工具Ant.docx
《Java的Build工具Ant.docx》由会员分享,可在线阅读,更多相关《Java的Build工具Ant.docx(26页珍藏版)》请在冰豆网上搜索。
Java的Build工具Ant
1、Ant概述
(1)Ant是什么
●它是一个自动化脚本引擎
它是一种基于Java的Build工具而且是一个自动化脚本引擎,脚本格式为XML。
理论上来说,它有些类似于C中的make,但比make优越。
●与其它平台下的make文件的不同点
现在存在的大多数Build工具,如make、gnumake、nmake、jam等都存在这样或那样的不足,比如依赖于特定的平台、配置文件过于复杂或者对格式无法检查而容易出错等。
而不同的是Ant可以运行在多种操作平台上,满足开发者跨平台构建项目代码的需要
●Ant与其它IDE的集成
Ant是一个独立的开发工具,但也可以被其他开发工具集成,目前Ant已经被一些著名的可视化的开发工具所集成,如NetBeans和Eclipse等。
(2)特性
与前面的这些工具相比较,Ant的两个特性决定了它是一款优秀的Build工具:
●基于Java的实现。
具有良好的跨平台性,同时可以通过增加新的Java类来扩展Ant的功能,而无需去了解不同平台上不同的脚本语言。
●基于XML的配置文件。
Ant以XML树来描述Target/Task的关系,文件结构清晰、易读易写,并且利用XML对格式的控制来避免由于配置文件的错误造成的Build操作失败。
(3)为什么要提供Ant
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。
在Java中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。
2、ANT的安装
(1)下载Ant
从Apache的网站http:
//www.apache.org或者从Apache组织Ant项目的网站http:
//ant.apache.org下载Ant。
下载之后将压缩包解压。
(2)设置环境变量
JAVA_HOME=JDK的Home目录
ANT_HOME=ant的Home目录
path=ant的Home目录下的bin目录;
(3)在项目所在的目录下启动Ant
C>ant
如果不指定配置文件,ant会缺省找build.xml这个配置文件(在项目的目录下应该有build.xml文件),并根据配置文件执行任务。
3、Ant的工作原理
它是将项目的构建任务分解,它分为工程、目标和任务3个层次;在Ant中的所有设定要素都是遵守XML规范的,并存储在默认的build.xml文件中。
●工程用来描述处于项目层次的内容
●目标由用户来编写,不同的目标对应于用户在使用上的一个操作任务单元
●基本的和面向特定行为的操作会由Ant在任务的层次上完成,所有任务都可以被目标调用,在目标内被组合装配起来完成用户自定义的一个过程,实现自动化工作的需要。
4、Ant的build.xml文件
(1)它是一个标准的XML文件
Ant的Build文件是一个标准的XML文件,它包含一个根节点Project,每个Project定义了至少一个或多个Target,每个Target又是一系列Task(每个Task是一段可被执行的代码,比如利用javac或者jar等工具进行操作)的集合。
(2)各个元素标签之间的关系
要用好Ant工具,关键是要编写好一个build.xml文件。
它们之间的关系如下图所示。
下面以一个示例来说明上面的含义
5、build.xml文件中的常用的标签
(1)build.xml文件中的工程project
●工程是对一个项目整个任务过程的抽象,它在build.xml中由
。
。
。
。
。
。
。
。
。
●工程(project)标签中主要包含有3个属性:
✓basedir指定此工程所在的根目录位置。
✓name设定这个工程的名称。
✓default设置此工程的build执行时默认的目标(target)入口。
(2)build.xml文件中的目标target
●目标(target)标签在工程project标签之内,一个工程project标签内可以包含任意多个目标target标签
。
。
。
。
。
。
●目标(target)标签中主要包含6个属性:
✓description对于这个任务的描述。
✓name这个任务的名称。
✓depends这个任务所依赖的任务,执行这个任务时会先执行所依赖的任务。
depends标记内可以添加多个目标。
例如下面的示例(在这个build中的目标执行顺序是:
y,z,x。
):
。
。
。
。
。
。
✓if检查某个属性是否被设置了,只有这个属性被设置时此任务才被执行。
例如:
。
。
。
.
✓unless检查某个属性是否被设置了,和if相反,只有在这个属性没有被设置时此任务才被执行。
✓id用于标示这个任务的id。
●目标的命名
ant脚本中的命名基本上都是一致的,比如:
编译一般叫build或者compile;打包一般叫jar或war;生成文档一般命名为javadoc或javadocs;执行全部任务all;usage,告诉用户有那些脚本选项可以使用。
(3)build.xml文件中的任务taskdef
●任务可以用来执行一个特定的工作,在Ant中已经实现了很多任务也就是在Ant中定义了大量的核心Task。
当然,Ant也支持用户自己开发任务,只要在使用之前声明这个任务就可以了,例如:
//com.liuyang.book/hello"/> (4)build.xml文件中的属性property ●属性标记用来设定工程中的一些全局性的量值,从而在各个JSP页面中封上信息 例如: piler=jikes deploy.server=lucky deploy.port=8080 deploy.url=http: //${deploy.server}: ${deploy.port}/ 从 ●属性(property)有两种类型: 一种是通过name来自定义属性(请见前面的示例),另一种是从其它资源获取属性(请见下面的示例)。 。 。 。 。 。 。 ● 属性名 描述 Name 属性的名称 Value 属性的值 Location 设置相对于当前的project中的basedir为父目录的子目录路径 Refid 对已经定义的其它对象进行引用 Resource 属性文件的资源名称 File 属性文件的文件名称 url 给定所要读出属性的文件的URL ●在任务中引用属性的值 采用"${属性名称}" 实例: --Createthebuilddirectorystructureusedbycompile--> --Compilethejavacodefrom${src}into${build}--> (5)build.xml文件中的路径classpath问题 ●在Ant中可以使用classpath在任务中设置Java的类路径 例如: 。 。 。 。 。 。 ●也可以使用path设置全局的路径,然后在其他位置引用 例如: 。 。 。 target="${javac.target}"> 。 。 。 (6)在build.xml文件中常用的一些任务标签 ●Jar任务: 创建*.jar包文件 其中的主要属性 basedir: 需要打包的源文件所在的目录 includes: 代表所要打包的文件,一般为*或者文件的类型 manifest: 指定打包时所需要的manifest文件,可以是manifest的位置设置 示例1: 将${build}/classes目录下的文件打包为app.jar,并将目标jar文件放在${dist}/lib目录下 示例2: 将${build}/classes目录下(但除掉Test.class文件)的文件打包为app.jar并放在${dist}/lib目录下 示例3: excludes="**/Test.class"/> 将${build}/classes目录下的mypackage/test子目录(但不包括Test.class文件)中的各个文件打包为app.jar并放在${dist}/lib目录下。 示例4: 打包目录${build}/classes和${src}/resources目录内的各个文件(但不包括Test.class文件)为app.jar并放在${dist}/lib目录中 ●Javac: 完成编译任务 其中的主要的属性为 srcdir: 需要编译的java源文件的目录 destdir: 编译后的结果*.class文件的目录定位 includes: 所要包括的文件名称或者文件类型 excludes: 不需要包括的文件名称或者文件类型 示例1: 编译${src}目录下的所有的*.java文件,并将编译的结果*.class文件放在${build}目录中。 示例2: 编译${src}目录下的所有的*.java文件,并将编译的结果*.class文件放在${build}目录中,并设置在编译过程中所需要的xyz.jar文件作为所引用的外部jar文件 示例3: excludes="mypackage/p1/testpackage/**"classpath="xyz.jar"debug="on"/> 编译${src}目录下的mypackage/p1(但不包括其中的mypackage/p1/testpackage目录中的文件)和mypackage/p2子目录中的所有的*.java文件,并将编译的结果*.class文件放在${build}目录中,并设置在编译过程中所需要的xyz.jar文件作为所引用的外部jar文件。 上面的内容,也可以改写为下面的形式: ●echo: 显示输出指定的信息 属性 描述 message 需要显示的信息 file 将信息写入文件时的文件名称 append 是否以追加方式写入文件中(取值为true或者false) level 设置信息的级别,可以是"error","warning","info","verbose","debug"等中一种 示例: ${line.separator}"/> ${line.separator} twolines. Thisisalongermessagestretchingoverthreelines;thefirstlineisablank "level="debug"/> Imminentfailureintheantimattercontainmentfacility. Pleasewithdrawtosafelocationatleast50kmaway. /bin/tcshjava-1.3.1-mx1024m${project.entrypoint}$$* (7)在build.xml文件中与文件相关的操作任务标签 在build中用得很多的是文件相关标记,下面举例介绍。 ●fileset: fileset用来描述一些文件对象的集合 ✓dir属性: 设置fileset的根目录位置; ✓exclude子标签: 设置fileset不包含的文件; ✓include子标签: 设置fileset包含的文件。 示例 。 。 。 。 。 。 ●dirset: dirset用来描述一些目录对象的集合 ✓dir属性: 设置dirset的根目录位置; ✓exclude子标签: 设置dirset不包含的目录; ✓include子标签: 设置dirset包含的目录。 示例 。 。 。 。 。 。 ●mkdir: mkdir用来创建文件目录,其dir属性则可以设置被创建目录的位置。 。 。 。 。 。 。 ●copy: copy用来实现文件复制的任务 ✓todir属性: 设置复制文件的目的位置; ✓fileset子标签: 作为需要被复制的文件集合,在copy中可以放置多个fileset和其它代表文件对象的标记。 示例 。 。 。 。 。 。 ●delete: delete用来实现文件删除的任务,其fileset子标签作为需要被删除的文件集合,在delete中可以放置多个fileset和其他代表文件对象的标记。 示例 。 。 。 <
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java Build 工具 Ant