先看一下項(xiàng)目的目錄結(jié)構(gòu):

source目錄里放Java源程序,classes目錄里放編譯好的class文件。這兩個(gè)目錄里的文件都要按包結(jié)構(gòu)組織好。當(dāng)然,classes目錄也可以不必事先建立,這可以交給Ant去做。以下是我寫的build.xml,放在Hello目錄下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <project name="hello" default="compile" basedir=".">
- <property name="tomcat.lib" value="/home/albert/Applications/apache-tomcat-5.5.26/common/lib" />
- <property name="dest.dir" value="WEB-INF/classes" />
- <property name="src.dir" value="source" />
- <target name="init">
- <mkdir dir="${dest.dir}" />
- </target>
- <target name="compile" depends="init">
- <javac srcdir="${src.dir}" destdir="${dest.dir}">
- <classpath>
- <fileset dir="${tomcat.lib}">
- <include name="*.jar" />
- </fileset>
- <fileset dir="WEB-INF/lib">
- <include name="*.jar" />
- </fileset>
- </classpath>
- </javac>
- </target>
- <target name="clean">
- <delete dir="${dest.dir}" />
- </target>
- </project>
在Ant的構(gòu)建文件build.xml中,最重要的是target(目標(biāo))。一個(gè)build.xml往往包含了多個(gè)target,定義了一個(gè)軟件項(xiàng)目的構(gòu)建過(guò)程以及每步之間的依賴關(guān)系。例如對(duì)于這個(gè)項(xiàng)目來(lái)說(shuō),“編譯”必須要在創(chuàng)建完classes目錄后才能進(jìn)行。此外,在進(jìn)行編譯時(shí),ant還會(huì)比較源文件和對(duì)應(yīng)的class文件的時(shí)間戳,以此來(lái)判斷源文件在上次編譯后是否被更新,是否需要重新編譯。知道了這些,就可以大體說(shuō)下各項(xiàng)的含義了。
最外層的project元素定義了項(xiàng)目的名稱(name),默認(rèn)構(gòu)建目標(biāo)(default)和構(gòu)建的基本目錄(basedir,當(dāng)前目錄 “.”)。basedir即設(shè)定文件中的相對(duì)路徑是相對(duì)于誰(shuí)而言的。接下來(lái)有一些property元素,你可以把它們當(dāng)成一些變量的定義,這是為了接下來(lái)引用的方便。
然后定義了三個(gè)target元素。第一個(gè)target的名字是init。名字的作用是:如果你想執(zhí)行某個(gè)target的任務(wù),只需在命令行下執(zhí)行 ant 即可。如果省略了,ant會(huì)執(zhí)行在project元素中定義的默認(rèn)目標(biāo)。在里面用mkdir定義了一個(gè)任務(wù),即創(chuàng)建classes目錄。這里引用了剛才定義的property,注意引用property的寫法:”${dest.dir}”。
第二個(gè)是compile目標(biāo)。depends=”init”說(shuō)明它依賴于init。即當(dāng)Ant發(fā)現(xiàn)init目錄沒有完成時(shí)(classes目錄還沒有創(chuàng)建時(shí)),Ant會(huì)先執(zhí)行init目標(biāo)。compile目標(biāo)里面用javac元素描述了編譯任務(wù)。srcdir和destdir分別指定了源文件的目錄和編譯后class文件的目錄。盡管因?yàn)榘Y(jié)構(gòu)的原因,source目錄下還有子目錄,但Ant會(huì)把source目錄下的所有Java源文件進(jìn)行編譯,并且在classes目錄下建立相應(yīng)的包結(jié)構(gòu)目錄,把所有的class文件放在正確的位置上。所有這一切都只是用這兩個(gè)參數(shù)來(lái)描述的。再往里是 classpath元素,用來(lái)設(shè)定編譯時(shí)的classpath,以便引用servlet-api.jar和struts庫(kù)里的類。我偷了個(gè)懶,把所有的 jar文件都包含進(jìn)來(lái)了。用的是fileset,指定好目錄和要包含的文件名(可以有通配符)就行了。
最后一個(gè)target clean是清除編譯生成的文件,用delete元素來(lái)完成。這樣當(dāng)在命令行下執(zhí)行ant clean后,classes目錄就被刪除了。
把這個(gè)build.xml放在項(xiàng)目目錄Hello中,以后只要在Hello目錄下執(zhí)行ant,就會(huì)自動(dòng)把所有需要編譯的文件編譯好后放在classes目錄里了,非常方便。
others
<?xml version="1.0" encoding="UTF-8"?>
<project name="hello" default="compile" basedir=".">
<property name="project.lib" value="WebRoot/WEB-INF/lib" />
<property name="tomcat.lib" value="D:/apache-tomcat-6.0.35/lib" />
<property name="dest.dir" value="WebRoot/WEB-INF/classes" />
<property name="src.dir" value="src" />
<target name="init">
<mkdir dir="${dest.dir}" />
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${dest.dir}" includeAntRuntime="false" encoding="UTF-8">
<classpath>
<fileset dir="${project.lib}">
<include name="*.jar" />
</fileset>
<fileset dir="${tomcat.lib}">
<include name="*.jar" />
</fileset>
</classpath>
</javac>
</target>
<target name="clean">
<delete dir="${dest.dir}" />
</target>
</project>
posted on 2014-08-27 22:34
fly 閱讀(115)
評(píng)論(0) 編輯 收藏 所屬分類:
Ant學(xué)習(xí)