Ant是什么
Ant是Apache的一个开源项目。它是一个跨平台的工具,主要用于项目项目的自动编译和打包和测试等。
Ant的优点
1.与平台无关,因为它是基于JAVA开发的。
2.脚本格式是基于XML,维护起来相对简单。
Ant的安装
1.在Apache的官网下载
http://www.apache.org/dist/ant/binaries/ 选择最新的 apache-ant-1.7.1-bin.zip
2.解压安装
解压到本机目录,如D:Ant
1.运行----cmd
2.配置环境变量
set JAVA_HOME=JDK安装路径
set ANT_HOME = D:Ant (Ant的安装路径)
3.配置系统变量
set PATH=%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin
注意,一定要加上 %PATH%;
4.测试
直接在cmd窗口中输入ant -version,然后回车即可看到当前ant的版本信息
Ant的基本元素
Ant是基于XML文件编写的,默认使用的文件为build.xml。下面拿一个简单的HelloWorld示例来演示。
1.E:build.xml如下:
<?xml version="1.0" ?> <project name="HelloWorld"> <target name="test"> <echo message="Hello,World!" /> </target> </project>
2.cmd----进入E盘----运行ant test--出现以下提示:
Buildfile: build.xml
test:
[echo] Hello,World!
BUILD SUCCESSFUL
Total time: 0 seconds
如果配置文件不是build.xml,而是test.xml,此时需要在ant后面加上一个参数ant -f test.xml test,-f 后面带的参数就是配置文件的文件名。
Ant配置文件关键属性的解析
1.project
project是Ant文件的根元素,必须包含至少一个project。在project下可以包含多个target。
它主要有以下属性
1) name
用来指定project元素的名称
2)default
定义ant命令默认执行的target
3)basedir
用于指定运行的基本路径信息。若未定义则为ANT_HOME
修改上面的build.xml,如下:
<?xml version="1.0" ?> <project name="HelloWorld" default="test1" basedir="D:wsdl"> <target name="test"> <echo message="Hello,World!" /> </target> <target name="test1"> <echo message="Hello,${basedir}" /> </target> </project>
cmd---E:-----ant--回车显示:
Buildfile: build.xml
test1:
[echo] Hello,D:\wsdl
BUILD SUCCESSFUL
Total time: 0 seconds
从结果很明显可以看出名字为test的target并没有执行,执行的是default定义的test1。而basedir属性也打印出来了,为D:\wsdl。注意:属性值的取法为${属性名}
2.target
target是Ant执行的任务单元,一个target里有一个或者多个任务。
它主要有如下属性:
1)name
定义target的名字,这个名称在一个project中是唯一的。ant可以根据target的name来定位target。
2)depends
当targetA的执行需要targetB的运行结果时,可以定义targetA依赖于targetB,执行时B会先执行。
3)if
判断属性是否存在,存在则执行target,否则不执行。
4)unless
与if相反,判断属性是否不存在,不存在执行target,否则不执行。
5)description
对当前target的描述
修改上面的build.xml文件如下:
<?xml version="1.0" ?> <project name="HelloWorld" default="test1" basedir="D:wsdl"> <target name="test"> <echo message="Hello,World!" /> </target> <target name="test1" depends="test" if="t" description="this is test1"> <echo message="Hello,${basedir}" /> </target> </project>
cmd --- E:----ant---回车显示:
Buildfile: build.xml
test:
[echo] Hello,World!
test1:
BUILD SUCCESSFUL
Total time: 0 seconds
因为test1依赖于test,所以会先执行test,由于t这个属性并不存在,所以test1不会执行。如果将上面的if改成unless,则test1和test都会执行。
3.property
property是用来定义属性名称及属性值的。它有两种方式定义,第一种直接在build.xml文件中定义;第二种是在外部属性文件里定义,然后在build.xml中引入。如test.properties,引入 <property file=” test.properties”/>。test.properties的格式为name=value。
修改上面的build.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <property file="build.properties" /> <property name ="name" value ="fer2005"/> <property name ="age" value ="30"/> <target name="classes"> <echo message="name:${name} age:${age}" /> </target> </project>
运行显示:
Buildfile: build.xml
test:
[echo] name:fer2005 age:30
BUILD SUCCESSFUL
Total time: 0 seconds
Ant的主要任务
1.echo
输出信息,有四个属性:message file append level
message:需要打印的消息
file:需要将打印的信息放入哪个文件
append:是否将消息追加到文件末尾,true追加,false则直接替换
level:消息输出的控制级别,有info,warning,error
修改build.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <property file="build.properties" /> <property name ="name" value ="fer2005"/> <property name ="age" value ="30"/> <target name="test"> <echo message="name:${name} age:${age}" /> <echo message="this is a echo test" file="test.txt" append="true" /> </target> </project>
运行,然后结果在E:test.txt中去查看。可以看见在test.txt中有this is a echo test。重新运行一次,则会有两个this is a echo test。若将append属性去掉重新运行则又只有一个this is a echo test了。
2.mkdir
新建目录,只有一个属性
dir:定义新建的文件夹名称。
<mkdir dir="test" />
3.delete
删除目录或文件,有四个属性
file:所要删除的文件
dir:只有找一个属性时,删除指定的目录
includeEmptyDirs:是否包含空目录
includes:包含何种类型的文件,可以使用通配符,与windows系统中的搜索功能相似。
修改build.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <target name="test"> <delete includeEmptyDirs="true" dir="." includes="*.txt"></delete> </target> </project>
删除当前目录下的空目录和所有txt文件。
也可以写成这种格式:
<?xml version="1.0" encoding="UTF-8"?> <project default="test" basedir="."> <target name="test"> <delete includeEmptyDirs="true"> <fileset dir="." includes="*.txt"/> </delete> </target> </project>
4.copy
复制文件或目录,主要有四个属性
file:需要复制的文件
tofile:复制好的新文件
dir:需要复制的目录
todir:复制到新的目录
复制文件
<copy file="build.xml" tofile="test.xml"></copy>
复制目录
<copy todir="../testnewdir"> <fileset dir="testsrcdir"/> </copy>
复制文件到目录
<copy file="test.txt" todir="../newdir"/>
5.move
移动文件或目录,与copy类似 :
移动单个文件(重命名):
<move file="srcfile" tofile="newfile"/>
移动文件到另一目录:
<move file="srcfile" todir="newdir"/>
移动目录:
<move todir="newdir"> <fileset dir="srcdir"/> </move>
利用Ant对Java程序的编译和打包
1.Java程序编译
javac命令
使用方法如下:
IDE:Eclipse
1.新建Java工程。如TestAnt
如图所示:
2.新建类Test.java
package com.fer2005.test; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("this a test class"); } }
3.在工程TestAnt目录下新建build.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project name ="TestAnt" default ="compile" basedir ="."> <target name ="clean"> <delete dir ="build"/> </target> <target name ="compile" depends ="clean"> <mkdir dir ="build/classes"/> <javac srcdir ="src" destdir ="build/classes"/> </target> </project >
执行compile前必须先删除build文件夹,然后通过mkdir建立文件夹,javac编译当前程序,保存的路径是build下的classes目录下。
4.在build.xml上右键Run As---Ant Build
5.刷新工程,即可看见生成文件夹和class文件。如图所示:
java命令
运行程序,执行类中的main方法。修改build.xml:
<?xml version="1.0" encoding="UTF-8"?> <project name="TestAnt" default="run" basedir="."> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > </project >
然后按上面的方法Ant build,打印出如下信息:
Buildfile: D:\workspace\TestAnt\build.xml
clean:
[delete] Deleting directory D:\workspace\TestAnt\build
compile:
[mkdir] Created dir: D:\workspace\TestAnt\build\classes
[javac] Compiling 1 source file to D:\workspace\TestAnt\build\classes
run:
[java] this a test class
BUILD SUCCESSFUL
Total time: 641 milliseconds
jar
对java工程进行打包,修改build.xml:
<?xml version="1.0" encoding="UTF-8"?> <project name="TestAnt" 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" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > <target name="jar" depends="run"> <jar destfile="TestAnt.jar" basedir="build/classes"> <manifest> <attribute name="Main-class" value="com.fer2005.Test" /> </manifest > </jar > </target> </project >
运行完成后可以看见生成的jar包。
2.Java Web 工程的编译和打包
1.新建一个web工程,结构图如下:
2.修改build.xml
<?xml version="1.0" ?> <project name="TestAnt" default="war" basedir="."> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" /> </target> <target name="run" depends="compile"> <java classname="com.fer2005.test.Test"> <classpath> <pathelement path="build/classes" /> </classpath > </java > </target > <target name="jar" depends="run"> <jar destfile="TestAnt.jar" basedir="build/classes"> <manifest> <attribute name="Main-class" value="com.fer2005.Test" /> </manifest > </jar > </target> <target name="war" depends="jar"> <war destfile ="build/TestAntWeb.war" webxml ="WebRoot/WEB-INF/web.xml"> <fileset dir ="WebRoot" includes ="**/*.jsp"/> <lib dir ="WebRoot/WEB-INF/lib"/> <classes dir="build/classes"/> </war> </target> </project >
war
destfile:生成的war包的路径和文件名
webxml:web工程的配置文件web.xml所在路径
<fileset dir ="WebRoot" includes ="**/*.jsp"/> :打包webroot下的所有jsp文件
lib:包所在的路径
classes:JAVA编译后的类文件路径。
3.运行即可得到war包TestAntWeb.war。
4.将TestAntWeb.war放到%TOMCAT_HOME%\webapps下,启动tomcat测试war包是否可用。