Apache Ant是一个将软件编译、测试、部署等联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
1 安装Ant
首先,在 http://ant.apache.org/bindownload.cgi 下载Ant。目前,最新的版本是1.9.6,选择 apache-ant-1.9.6-bin.zip 进行下载。
当然,也可以选择旧的版本,点击“Old Ant Release”下的“here”,进入旧版本的下载页。
2 配置环境变量
下载成功后,首先将上面下载好的 apache-ant-1.9.6-bin.zip 解压到 C:\java\apache-ant-1.9.6。新增系统变量“ANT_HOME”,内容是“C:\java\apache-ant-1.9.6”。(注意不要有分号)
然后,编辑系统环境变量“Path“,添加 Ant 的 bin 目录:”%ANT_HOME%\bin;“。(注意这里有分号)
打开CMD命令行界面,输入命令ant
,出现如下信息表示配置成功。
3 Hello World
每次接触新语言,Hello World是必不可少的初级任务。下面构建一个最简单的应用来让我们感受一下Ant的魅力。
3.1 项目初始化
新建一个工作目录:Demo,在根目录下新建一个目录 src,并在目录 src 下新建一个文件 HelloWorld.java。在根目录下新建一个文件 build.xml。目录结构见下图。
HelloWorld.java 文件内容见如下代码片:
// HelloWorld.java
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
3.2 构建项目
写入以下内容到配置文件 build.xml 中。
// build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src" />
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar"/>
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="jar" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="jar">
<java classname="HelloWorld" classpath="${hello_jar}"/>
</target>
<target name="clean">
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
<target name="rerun" depends="clean, run">
<ant target="clean"/>
<ant target="run"/>
</target>
</project>
使用ant
命令构建该项目。
如上图所示,则成功构建。
此时目录结构发生变化,根目录下新增了 classes 目录和 hello.jar 文件。并且 classes 目录下有 HelloWorld.class 文件。
4 解释以上 Ant 配置文件
Ant 是通过 XML 配置文件来构建项目的,下面根据以上的配置文件来解释 Ant 中几个常用的基本用法。
- project : 每个构建包含一个工程
- target : 目标,每个工程都有若干个目标,而这些目标相互之间可以有依赖关系
- depends : 每个工程包含若干个目标(target),可以依赖于其他的目标
- property : 定义属性或变量,相当于 Java 里的变量
- task : 任务,每个任务都相当于一行命令,不同的任务执行不同的命令,可以多个任务在同一个目标下
project
<project name="HelloWorld" default="run" basedir=".">
</project>
Ant 的所有内容必须包含在这个里面,name 是我们给它取的名字,basedir 是工作的根目录。其中的“.”代表当前目录。default 代表默认要做的事情。
property
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar"/>
类似程序中的变量,name 是变量名,value 是变量对应的值。
target & task(mkdir)
<target name="init">
<mkdir dir="${dest}"/>
</target>
目的:创建一个文件夹。
把我们想做的每一件事写成一个 target,它有一个名字。使用mkdir来创建文件夹。将第一个 target 命名为 init,是一个很好的做法,其他的 target 以来这个初始化 target。
target & task(javac)
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
目的:编译程序,把源程序编译到目标地点。
depends 是它所依赖的 target,在执行这个 compile 的 target 之前,ant 会先检查 init 是否已经被执行过,如果执行过,则直接执行 compile;如果没有执行过,就会执行它依赖的 target,然后再执行本身的 target。
target & task(jar)
<target name="jar" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
目的:打 jar 包。
target & task(java)
<target name="run" depends="jar">
<java classname="HelloWorld" classpath="${hello_jar}"/>
</target>
目的:运行 jar 包内的程序。
target & task(delete)
<target name="clean">
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
目的:删除生成的文件。
target & task(ant)
<target name="rerun" depends="clean,run">
<ant target="clean"/>
<ant target="run"/>
</target>
目的:再次运行,这里显示了如何在一个 target 里边调用其他的 target。