Ant工具是非常有用的工程部署工具,可以自动编译java项目,自动对文件进行打包,则我们可以只需要提交代码,打包直接执行命令就可以,所以非常实用。
Ant工具直接作用到build.xml文件,所以对于build.xml文件进行直接配置。
一般来说,build.xml文件的头元素为
,然后包括三个子元素:
property
path
和classpath
target
我们可以在Ant手册中可以看到,下面直说以下常用的属性,以部署javaweb文件为例。
<project name="" description="" default="" basedir="">
project>
下面对每一个属性进行分析:
<target name="help" description="打印相关帮助信息" >
<echo>help - 打印帮助信息echo>
target>
<target name="init">
<mkdir dir="${src.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${war.dir}" />
target>
<target name="clean" description="delete old build and dist directories" >
<delete dir="${class.dir}" />
<delete dir="${war.dir}" />
target>
<target name="complie" description="Complie java sources" depends="clean">
<mkdir dir="${class.dir}" />
<mkdir dir="${war.dir}" />
<javac srcdir="${src.dir}" destdir="${class.dir}">
<classpath refid="complie.classpath"/>
javac>
<copy todir="${class.dir}">
<fileset dir="${src.dir}" excludes="**\*.java" />
copy>
target>
<target name="deploy" description="install application to servlet container" depends="complie">
<delete dir="${webapps.dir}\${webapps.name}" />
<war destfile="${war.dir}\${webapp.name}.war" basedir="${web.dir}"
webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >
<lib dir="${lib.dir}" />
<classes dir="${class.dir}" />
war>
target>
从上文中,我们可以看出,存在5个target,每个target执行相关的任务,首先给出target的常用属性。
下面介绍target的任务,即该target怎么执行,默认的target存在大量任务,大家可以自己查阅 /manual/tasks.在这里只描述以上用到的task。
<javac srcdir="${src.dir}" destdir="${class.dir}">
<classpath refid="complie.classpath"/>
javac>
javac通常需要srcdir和destdir,srcdir表示源代码所在的位置,而destdir表示将编译后的.class文件存储的位置,通常编译java文件需要外部架包,所有我们将外部架包加入。利用classpath,(classpath和path实际是同一个东西,path作为独立元素使用,而classpath通常作为其他的元素引入使用。)
<copy todir="${class.dir}">
<fileset dir="${src.dir}" excludes="**\*.java" />
copy>
copy表示将文件复制到其他地方,通常todir表示目的地,必须!子元素通常包括文件集合,fileset,excludes表示不包括的文件,includes表示包括的文件。
<delete dir="${class.dir}" />
<delete dir="${war.dir}" />
delete表示删除相关文件,dir表示要删除的目录,includes表示要删除的相关文件,如果没有表示删除该目录。
<mkdir dir="${src.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${war.dir}" />
mkdir表示创建文件夹,dir表示创立的文件夹名字。
"${war.dir}\${webapp.name}.war" basedir="${web.dir}"
webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >
"${lib.dir}" />
"${class.dir}" />
主要的属性:
包括的打包文件:主要为lib和classes,将其包括进去,一起打包就可以,dir来指定它们的地址。
<echo>help - 打印帮助信息echo>
echo 打印出某个字符串的功能
用来指定相关的属性名字,就是基本的键值对,在后面的引用中,可以用${}来引用相关的名字,好处就是做出改变的时候,只需要改变属性值就可以。代码如下:
<property name="webapp.name" value="demo" />
<property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
<property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
<property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
<property name="src.dir" value="${basedir}\src" />
<property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
<property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
<property name="webapps.dir" value="${catalina.home}\webapps"/>
<property name="web.dir" value="WebContent" />
<property name="war.dir" value="war"/>
path的目的定义相关的lib所在的路径,基本包括tomcat的路径,java的lib路径,webcontent中自己加载的路径。代码如下:
<path id="complie.classpath" >
<fileset dir="${catalina.home}\lib">
<include name="*.jar" />
fileset>
<fileset dir="${java.home}\lib">
<include name="*.jar" />
fileset>
<fileset dir="${java.home.ext}">
<include name="*.jar" />
fileset>
<fileset dir="${lib.dir}">
<include name="*.jar" />
fileset>
path>
其中fileset表示目标的文件集合,dir指定该目录下面的文件,include表示包含的文件,其中给定id,则在javac的时候可以直接饮用该id。
另外还有其他很多的task命令比如java和jar等等,下面给出完整的build.xml文件。
<project name="demo" default="complie" basedir=".">
<property name="webapp.name" value="demo" />
<property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
<property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
<property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
<property name="src.dir" value="${basedir}\src" />
<property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
<property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
<property name="webapps.dir" value="${catalina.home}\webapps"/>
<property name="web.dir" value="WebContent" />
<property name="war.dir" value="war"/>
<path id="complie.classpath" >
<fileset dir="${catalina.home}\lib">
<include name="*.jar" />
fileset>
<fileset dir="${java.home}\lib">
<include name="*.jar" />
fileset>
<fileset dir="${java.home.ext}">
<include name="*.jar" />
fileset>
<fileset dir="${lib.dir}">
<include name="*.jar" />
fileset>
path>
<target name="help" description="打印相关帮助信息" >
<echo>help - 打印帮助信息echo>
target>
<target name="init">
<mkdir dir="${src.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${war.dir}" />
target>
<target name="clean" description="delete old build and dist directories" >
<delete dir="${class.dir}" />
<delete dir="${war.dir}" />
target>
<target name="complie" description="Complie java sources" depends="clean">
<mkdir dir="${class.dir}" />
<mkdir dir="${war.dir}" />
<javac srcdir="${src.dir}" destdir="${class.dir}">
<classpath refid="complie.classpath"/>
javac>
<copy todir="${class.dir}">
<fileset dir="${src.dir}" excludes="**\*.java" />
copy>
target>
<target name="deploy" description="install application to servlet container" depends="complie">
<delete dir="${webapps.dir}\${webapps.name}" />
<war destfile="${war.dir}\${webapp.name}.war" basedir="${web.dir}"
webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >
<lib dir="${lib.dir}" />
<classes dir="${class.dir}" />
war>
target>
project>