1、什么是Ant
Ant(Another neat tool)使用java编写的开源构建工具,为源码编译、单元测试、打包等任务操作提供了自动化支持,并且可以通过java写新的任务来扩建构建。
2、Ant安装
(1)Ant属于解压配置即可使用的软件
下载解压apache-ant-1.10.5-bin.zip,例如解压到:D:/ apache-ant-1.10.5
(2)window中设置ant环境变量:
ANT_HOME D:/ apache-ant-1.10.5
path D:/ apache-ant-1.10.5/bin(或者:%ANT_HOME%\bin)
(3)开始->运行->cmd,输入如下命令:ant -v
3、Ant核心构建脚本build.xml讲解
一个构建脚本由三个基本元素组成:一个project、多个target和多个可用的task,三者之间的关系如下:
task:是一段可执行的代码,如创建一个目录或移动一个文件,Ant自带很多自定义task,用户可以使用java编写自己的task
<javac srcdir="src" destdir="dest"> <!--源代码目录和目标目录由srcdir和destdir属性配置,源代码放在src,class放在dest-->
target:target是一组task的集合,target与target可以存在依赖关系
<target name="init"> <mkdir dir="build"/> </target> <!--名字为init的target使用任务mkdir创建目录build--> <target name="compile" depends="init"> <javac srcdir="src" destdir="build"/> </target> <!--名字为compile的target依赖名字为init的target,并且使用了javac任务-->
project:一个Ant构建脚本必须只能有一个project,project是Ant构建脚本的顶级元素,可包含多个target
<project> <target name="init"> <mkdir dir="build"/> </target> <target name="compile" depends="init"> <javac srcdir="src" destdir="build"/> </target> </project>
4、Ant案例实战
项目目录结构(假如其中demo为D:\demo):
- demo
- |--src
- |----Hello.java(D:\demo\src\Hello.java)
- |--build.xml(D:\demo\build.xml)
hello.java 内容:
public class Hello{ public static void main(String[] args){ System.out.println("hello ant"); } }
build.xml 内容:
<project name="hello" default="dist" basedir="."> <!--设置全局属性,比如源代码、输出和发布目录--> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <property name="version" value="1.0.0"/> <!--定义target名字为init并创建编译路径--> <target name="init"> <mkdir dir="${build}"/> </target> <!--编译--> <target name="compile" depends="init" description="compile the source"> <javac srcdir="${src}" destdir="${build}"/> </target> <!--打jar包--> <target name="dist" depends="compile" description="generate the jar"> <mkdir dir="${dist}"/> <jar jarfile="${dist}/hello-ant-${version}.jar" basedir="${build}" /> </target> <!--删除编译--> <target name="clean" description="clean build and dist"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project>
通过target的name可以分别指定执行ant init、ant compile、ant dist、ant clean
执行 ant dist 由于 init compile dist 三个tagert 之间的依赖,会依次执行如下图:
执行ant dist 后会生成一个build的目录存放编译后的文件和生成一个dist存放jar文件,目录结构如下:
- demo
- |--build
- |----Hello.class(D:\demo\build\Hello.class)
- |--dist
- |----hello-ant-1.0.0.jar(D:\demo\dist\hello-ant-1.0.0.jar)
- |--src
- |----Hello.java(D:\demo\src\Hello.java)
- |--build.xml(D:\demo\build.xml)
5、Ant优缺点总结
优点:由于Ant没有对构建定义强加任何限制,构建灵活,没有对项目目录结构有硬性规定
缺点:(1)xml标记语言构建脚本比较臃肿,当使用标记语言描述类似if/else等逻辑语句是比较困难
(2)由于Ant没有一套默认的构建逻辑,所以不同的项目都要重复书写构建逻辑或者复制构建逻辑进行修改
(3)Ant没有暴露构建细节,比如有多少个类编译了多少的task执行了等等
(4)Ant本身不带依赖管理,需要与Ivy集成管理依赖