鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 構(gòu)建項(xiàng)目
生成 WAR 文件
JUnit 集成
環(huán)境搭建
Eclipse 集成
部署應(yīng)用
屬性任務(wù)
擴(kuò)展 Ant
?# 執(zhí)行 Java 代碼
構(gòu)建項(xiàng)目
構(gòu)建文件
數(shù)據(jù)類型
生成 JAR 文件
生成文檔
屬性文件
封裝應(yīng)用
介紹

構(gòu)建項(xiàng)目

現(xiàn)在我們已經(jīng)學(xué)習(xí)了 Ant 的數(shù)據(jù)類型,是時(shí)候在實(shí)際過(guò)程中運(yùn)用所學(xué)知識(shí)了。在這一章節(jié)中,我們將會(huì)構(gòu)建一個(gè)項(xiàng)目。這一章節(jié)的目的是創(chuàng)建一個(gè) Ant build 文件,該文件能夠編譯 Java 源文件和將這些類文件存儲(chǔ)在 WEB-INF\classes 文件夾下。

考慮接下來(lái)構(gòu)建項(xiàng)目的結(jié)構(gòu):

  • 數(shù)據(jù)腳本存儲(chǔ)在 db 文件夾中。
  • java 源文件存儲(chǔ)在 src 文件夾中。
  • images (圖像),js (JavaScript 腳本),style (css 層疊樣式表)存儲(chǔ)在 war 文件夾中。
  • JSPs 文件存儲(chǔ)在 jsp 文件夾中。
  • 第三方的 jar 文件存儲(chǔ)在 lib 文件夾中。
  • java 類文件存儲(chǔ)在 WEB-INF\classes 文件夾中。

學(xué)習(xí)完本教程的剩余部分后,就能知道這個(gè)項(xiàng)目是一個(gè) Hello World 傳真應(yīng)用。

C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
.  +---faxapp
.  +---dao
.  +---entity
.  +---util
.  +---web
+---war
   +---images
   +---js
   +---META-INF
   +---styles
   +---WEB-INF
      +---classes
      +---jsp
      +---lib

下面給出上述項(xiàng)目的 build.xml 文件的內(nèi)容。讓我們來(lái)一條語(yǔ)句接一條語(yǔ)句地來(lái)分析它。

<?xml version="1.0"?>
<project name="fax" basedir="." default="build">
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>

   <target name="build" description="Compile source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" target="1.5">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      </javac>
   </target>

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

首先,讓我們來(lái)聲明一些源文件,web 文件和構(gòu)建文件的一些屬性信息。

<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>

在上面的例子中:

  • src.dir 表示這個(gè)項(xiàng)目的源文件目錄,也就是存儲(chǔ) java 文件的地方。
  • web.dir 表示這個(gè)項(xiàng)目的 web 文件目錄,也就是存儲(chǔ) JSPs 文件,web.xml,css,javascript 以及其它與 web 相關(guān)的文件的地方。
  • build.dir 表示該項(xiàng)目的輸出文件。

屬性也可以引用其它屬性。在上面的例子中,build.dir 屬性引用了 web.dir 屬性。

在上面的例子中,src.dir 就是項(xiàng)目源文件存放的地方。

我們項(xiàng)目的默認(rèn)目標(biāo)是編譯目標(biāo)。但是首先讓我們來(lái)看一下 clean 目標(biāo)。

clean 目標(biāo),就像它的名字所表明的意思一樣,刪除構(gòu)建文件夾中的所有文件。

<target name="clean" description="Clean output directories">
   <delete>
      <fileset dir="${build.dir}">
         <include name="**/*.class"/>
      </fileset>
   </delete>
</target>

控制類路徑 (master-classpath) 保存類路徑的相關(guān)信息。在這種情況下,它包含了構(gòu)建文件夾和 jar 文件夾中的所有的類文件。

<path id="master-classpath">
   <fileset dir="${web.dir}/WEB-INF/lib">
      <include name="*.jar"/>
   </fileset>
   <pathelement path="${build.dir}"/>
</path>

最后,構(gòu)建目標(biāo)構(gòu)建這些文件。首先,我們創(chuàng)建一個(gè)構(gòu)建目錄,如果該目錄不存在,我們就執(zhí)行 javac 命令(具體以 jdk 1.5 作為我們目標(biāo)的編譯環(huán)境)。 我們對(duì) javac 任務(wù)提供源文件夾和類路徑,并且通過(guò)執(zhí)行 javac 任務(wù)將類文件存放在構(gòu)建文件夾中。

<target name="build" description="Compile main source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   </javac>
</target>

在這個(gè)文件上執(zhí)行 Ant,編譯 java 源文件,并將編譯后的類文件存放在構(gòu)建文件夾的地方。

運(yùn)行 Ant 文件后,能看到以下輸出:

C:\>ant
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

文件被編譯后,將存儲(chǔ)在 build.dir 文件夾中。

上一篇:JUnit 集成下一篇:屬性文件