一、ant的下载、配置
下载:官网地址:http://ant.apache.org/ , 我下的是December 29, 2013 - Apache Ant 1.9.3 Released(apache-ant-1.9.3-bin.tar)。下载后解压到某个目录就可以了(我放在D:\apache-ant-1.9.3)。
配置:添加环境变量ANT_HOME,指向ant解压后的根目录(我的是D:\apache-ant-1.9.3);然后再把ant的bin目录路径添加到path中(我的是D:\apache-ant-1.9.3\bin);最后在Terminal或者命令提示符下运行ant -version就可以查看版本信息了。
二、ant的关键元素
ant的构件文件是基于XML编写的,默认名称为build.xml。当然,可以是其他名称,只是在运行时需要通过ant -f XX.xml 来指定具体文件了。
通过创建一个java工程来分析ant的关键元素。工程名:helloworld
java代码:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello,world");
}
}
build.xml代码:
<?xml version="1.0"?>
<project name="helloworld" default="jar" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" includeantruntime="false"/>
</target>
<target name="run" depends="compile">
<java classname="Hello" classpath="build/classes"/>
</target>
<target name="jar" depends="run">
<jar destfile="Hello.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="Hello"/>
</manifest>
</jar>
</target>
</project>
通过xml文件运行工程的方法有两种:
(1)通过右击build.xml文件,选择Run As-->Ant Build就可以通过该xml文件执行java工程了,如图。
(2)也可以通过在Terminal等终端,输入ant target名 或 ant -f XX.xml target名 来执行该xml文件,如图。
接下来分析build.xml文件内容来理解ant的关键元素。
1.project元素
project元素是Ant构件文件的根元素,ant构件文件至少应该包含一个project元素,否则会发生错误。在每个project元素下,可包含多个target元素。下面介绍project元素的各属性。
1)name属性
用于指定project元素的名称。
2)default属性
用于指定project默认执行时所执行的target的名称。
3)basedir属性
用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。
ps:如果用户想得到某个project下所有的target的名称,可以通过在ant命令里加上-projecthelp来达到该目的:
$ ant -projecthelp
Buildfile: D:\Users\binchen\workspace\helloworld\build.xml
Main targets:
Other targets:
clean
compile
jar
run
Default target: jar
2.target元素
target是Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target可以存在相互依赖关系。它有如下属性:
1)name属性
指定target元素的名称,这个属性在一个project元素中是唯一的。我们可以通过指定target元素的名称来指定某个target。
2)depends属性
用于描述target之间的依赖关系,若与多个target存在依赖关系时,需要以“,”间隔。Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。
3)if属性
用于验证指定的属性是否存在,若不存在,所在target将不会被执行。
4)unless属性
该属性的功能与if属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在target将会被执行。
5)description属性
该属性是关于target功能的简短描述和说明。
3.property元素
该元素可看作参量或者参数的定义,project的属性可以通过property元素来设定,也可在ant之外设定。若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:<property file=” build.properties”/>
property元素可用作task的属性值。在task中是通过将属性名放在“${”和“}”之间,并放在task属性值的位置来实现的。
ant提供了一些内置的属性,它能得到的系统属性的列表与Java文档中System.getPropertis()方法得到的属性一致。
同时,ant还提供了一些它自己的内置属性,如下:
basedir:project根目录的绝对路径;
ant.file:buildfile的绝对路径,如上面的各例子中,ant.file的值为E:\build.xml;
ant.version:ant的版本;
ant.project.name:当前指定的project的name属性的值;
ant.java.version:ant检测到的JDK的版本。
三、ant的常用任务及使用
1.copy任务
该任务主要用来对文件和目录的复制功能。举例如下:
1)复制单个文件:
<copy file="file.txt" tofile="copy.txt"/>
2)对文件目录进行复制:
<copy todir="../newdir/dest_dir">
<fileset dir="src_dir"/>
</copy>
3)将文件复制到另外的目录:
<copy file="file.txt" todir="../other/dir"/>
2.delete任务
对文件或目录进行删除,举例如下:
1)删除某个文件:
<delete file="photo/amigo.jpg"/>
2)删除某个目录:
<delete dir="photo"/>
3)删除所有的备份目录或空目录:(我试了下没效果)
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
3.mkdir任务
创建目录。
<mkdir dir="build"/>
4.move任务
移动文件或目录,举例如下:
1)移动单个文件:
<move file="fromfile" tofile=”tofile”/>
2)移动单个文件到另一个目录:
<move file="fromfile" todir=”movedir”/>
3)移动某个目录到另一个目录:
<move todir="newdir">
<fileset dir="olddir"/>
</move>
5.echo任务
该任务的作用是根据日志或监控器的级别输出信息。它包括message、file、append和level四个属性,举例如下:
<echo message="Hello World" file="logs/system.log" append="true">
这个例子是将Hello World追加到logs/system.log文件的尾部。
四、利用ant构建和部署Java工程
Ant可以代替使用javac、java和jar等命令来执行java操作,从而达到轻松的构建和部署Java工程的目的。
1.利用ant的javac任务来编译java程序
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" includeantruntime="false"/>
</target>
2.使用ant的java任务运行Java程序
<target name="run" depends="compile">
<java classname="Hello" classpath="build/classes"/>
</target>
3.使用ant的jar任务生成jar文件:运行该build.xml文件后,可看到在工程目录下生成了一个jar包Hello.jar
<target name="jar" depends="run">
<jar destfile="Hello.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="Hello"/>
</manifest>
</jar>
</target>
这样,通过ant就完成了java项目的编译、运行,实现了通过脚本(其实是xml文件)来操作工程。