这几天在公司比较闲,所以决定学习ANT的使用,ANT(another neat tool)是一种快速构建工具,主要用于java,类似于C++的make。ANT功能很强大,但很易于使用。
你们一定很奇怪,既然说它易于使用,为什么我要学几天??呵呵~主要是学习资料不足和自己比较粗心的缘故。
下面我就先把我自己写的build.xml文件拿出来,build.xml文件是作为ANT的buildfile,运行ANT命令时,会默认查找当前目录下的这个文件。
<!--build.xml start-->
<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<property name="myclasspath" location="WebRoot\WEB-INF\classes"/>
<property name="lib.dir" location="E:\setup\java\jakarta-tomcat-5.0.28\common\lib"/>
<property name="mylib.dir" location="WebRoot\WEB-INF\lib"/>
<path id="libAndClass.path">
<pathelement location="${build}" />
<fileset dir="${lib.dir}" >
<include name="**/*.jar" />
</fileset>
<fileset dir="${mylib.dir}" >
<include name="**/*.jar" />
</fileset>
</path>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<echo message="-1- >> Create the class files directory successful!" />
<echo message="[mkdir] Created dir:${build}" />
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}">
<classpath refid="libAndClass.path" />
</javac>
<echo message="-2- >> Compile the java source files to the Build directiory successful!" />
<echo message="[javac] Compiling all source files to ${build}" />
</target>
<target name="dist" depends="compile">
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/WebComm-${DSTAMP}.jar" basedir="${build}"/>
<echo message="-3- >> Create the the project jar file to the Dist directiory successful!" />
<echo message="[jar] Building jar: ${build}" />
</target>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
<target name="copyto">
<copy todir="${myclasspath}">
<fileset dir="${build}"/>
</copy>
</target>
</project>
<!--build.xml end-->
这个build.xml的主要用于编译*.java文件,主要的target(一项任务)是Compile,因为编译之后还要将之打包,所以将默认target为dist:
<project name="MyProject" default="dist" basedir=".">
=>default="dist"
basedir=".":指明工作路径为当前目录。
按照依赖关系“depends=targetname”,ANT命令会按init,compile,dist的顺序来执行这些target。后面的两个target:clean,copyto并不会执行,需要在命令行下输入:ant targetname的形式才会执行,这两个target的功能是用于删除class文件的文件夹和将这些class文件拷到WEB-INF\classes下。
现在主要讲讲最主要的target:compile,也就是编译。
在java源文件中,我们很多时候都需要要导入一些相关包,所以在用javac编译这些源文件时,需要加上classpath,因此,在用ANT来编译时我们也需要要指定这些jar文件路径,以求顺利通过编译。
我们在前面先定义好我们需要的classpath:
<path id="libAndClass.path">
<pathelement location="${build}" />
<fileset dir="${lib.dir}" >
<include name="**/*.jar" />
</fileset>
<fileset dir="${mylib.dir}" >
<include name="**/*.jar" />
</fileset>
</path>
id="libAndClass.path"是指定一个id以方便在target里引用。
<pathelement location="${build}" />:是让生成的class类文件也作为以后编译要用到的相关类文件。
<fileset dir="${lib.dir}" >
<include name="**/*.jar" />
</fileset>
是指定本工程项目的WEB-INF\lib下的jar包。
<fileset dir="${mylib.dir}" >
<include name="**/*.jar" />
</fileset>
指定tomcat下的公共库。
完成后就直接在compile的target里引用:
<javac srcdir="${src}" destdir="${build}">
<classpath refid="libAndClass.path" />
</javac>
注意,在这里,引用是用refid=idname方式,不然不能正常工作。我就是因为把refid误换成localtion,所以一直不能编译成功。
以上是我在学习ANT中的一些体会,并不是ANT教程,所以没有讲得很细,但看过ANT的基础知识后再看我写的这篇文章,应该就很好理解了,希望对初学者有点帮助。