這幾天在公司比較閑,所以決定學習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的基礎知識后再看我寫的這篇文章,應該就很好理解了,希望對初學者有點幫助。