Ant是一个构建工具,它通过自动完成所有的编译代码,运行测试以及打包重新部署的结果等繁琐费力的任务来帮助软件团队开发大程序。
目标
自动完成所有的构建过程:编译、打包、测试……
优点
使用Java编写,跨平台,易使用且可伸缩。
基于XML,比脚本好维护
安装
下载Ant工具包
环境变量Path中添加解压后bin目录
环境变量中添加:Ant_Home=解压目录
测试安装是否成功:ant -version
核心概念
构建文件——build.xml
开发者列出各种构建目标(target)以及达到这些目标的任务(task)
一个构建文件包含一个项目
每个项目包含多个目标,目标依赖于其他目标
目标包含任务,任务做工作
结构图
工程包含一个目标的集合,在每个目标里是任务的声明,她们是对Ant用于构建该目标的行为说明。目标生成一个依赖关系图来声明该目标的依赖关系,当执行一个目标时,必须先执行她们依赖的目标。
执行步骤
target为完成某一目标而组成的一组动作序列,是ant的核心元素。Ant执行时,首先寻找project中default属性所指定的taget,根据target的depends属性指定依赖关系,依次向上迭代,按照依赖相反的顺序一次执行各个target。
Build.xml示例:
- <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
- <project basedir=".." default="war" name="struts">
- <property name="src.dir" value="${basedir}\ItcastOA\src" />
- <property name="lib.dir" value="${basedir}\ItcastOA\WebRoot\WEB-INF\lib" />
- <property name="webapp.dir" value="${basedir}\ItcastOA\WebRoot" />
- <property name="build.src" value="${basedir}\ItcastOA\src" />
- <property name="build.dest" value="${basedir}\ItcastOA\WebRoot\WEB-INF\classes" />
- <property name="buildwar.dest" value="${basedir}\ItcastOA\WebRoot" />
- <property name="war.file" value="${basedir}\ItcastOA\build\Ant.war" />
- <path id="classpath_id">
- <fileset dir="${lib.dir}">
- <include name="**/*.jar" />
- </fileset>
- <pathelement path="${classpath}"></pathelement>
- </path>
- <target name="delete">
- <echo>"根目录是:"+${basedir}</echo>
- <echo>"webapp.dir是:"+${webapp.dir}</echo>
- <echo>删除Classes目录下面的无用文件</echo>
- <delete dir="${build.dest}"></delete>
- <echo>清除完毕</echo>
- </target>
- <target name="init" depends="delete">
- <echo message="开始初使化${src.dir}"></echo>
- </target>
- <target name="compile" depends="init" description="compile the source file">
- <mkdir dir="${build.dest}" />
- <javac encoding="UTF-8" srcdir="${src.dir}" destdir="${build.dest}">
- <classpath refid="classpath_id" />
- </javac>
- </target>
- <target name="war" depends="compile">
- <description> 开始打包 </description>
- <war warfile="${war.file}" webxml="${webapp.dir}/WEB-INF/web.xml">
- <fileset dir="${buildwar.dest}" />
- </war>
- </target>
- </project>
- </span>
1、入口
<project basedir=".." name="struts" default="war">
</project>
project:每个构建文件以project为根节点
Name="**"为工程名
Defaul="war":默认执行**目标的入口
2、property-定义变量
<property name="src.dir" value="${basedir}\ItcastOA\src" />
变量名为src.dir 值为${basedir}\ItcastOA\src
3、编译
- <span style="font-size:18px;"> <target name="compile" depends="init" description="compile the source file">
- <mkdir dir="${build.dest}" />
- <javac encoding="UTF-8" srcdir="${src.dir}" destdir="${build.dest}">
- <classpath refid="classpath_id" />
- </javac>
- lt;/target></span>
Compile表示编译,它依赖于初始化int,description输出描述信息;
<javac srcdir="src" destdir="build/dest"/>:表示编译工程src文件夹下面所有的.java文件,并将编译后的.class文件放到build/dest文件夹下。
注:编译过程中会自动生成build和dist文件夹
4、打包工程
- <span style="font-size:18px;"> <target name="war" depends="compile">
- <description> 开始打包 </description>
- <war warfile="${war.file}" webxml="${webapp.dir}/WEB-INF/web.xml">
- <fileset dir="${buildwar.dest}" />
- </war>
- lt;/target></span>
war表示将build/dest文件夹下面的文件打包成war文件,并将打包的文件放到dest文件夹下,也可打包为zip、jar……
5、delete
- <span style="font-size:18px;"> <target name="delete">
- <echo>"根目录是:"+${basedir}</echo>
- <echo>"webapp.dir是:"+${webapp.dir}</echo>
- <echo>删除Classes目录下面的无用文件</echo>
- <delete dir="${build.dest}"></delete>
- <echo>清除完毕</echo>
- </target>
- <target name="init" depends="delete">
- <echo message="开始初使化${src.dir}"></echo>
- </target></span>
清除缓存和打包文件,根据.class文件和打包文件的具体地址定义dir的值(一般默认为build和dist文件夹)
Task
设置:
<echo></echo> 相当于java中的:system.out.println();
property:定义变量、引用属性文件、从网络上读取属性文件。
classpath:设置类路径
操作:
copy:拷贝
delete:删除
目录:
mkdir:创建目录
srcdir:源文件
destdir源文件编译后生成的.class文件存放路径
打包形式:
jar:destfile="**/OA.jar"
War:warfile="**/OA.war"
扩展
Svn:export(SVN上当下源码)
ftp:remotedir(远程目录)
与Maven区别
项目管理
Maven中Pom模型定义了项目的方方面面,所有脚本都在这个上面进行工作,拥有依赖管理;
ant完全自己定义
版本管理
Maven对所有包都有明确定义,版本是多少一目了然。
Ant通常使用include所有的jar,无法很快得到版本
包的管理
Maven是基于中央仓库编译,即把所需要的资源放在一个中央仓库里,编译时会自动到库中找到相应的包
Ant的发布则要把所有的包发布