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

生成 WAR 文件

使用 Ant 創(chuàng)建 WAR 文件是極其簡單的。這與創(chuàng)建 JAR 文件任務(wù)非常類似。 畢竟,WAR 文件與 JAR 文件只是兩種不同的 ZIP 文件。

WAR 任務(wù)是 JAR 任務(wù)的一個擴展,但是其對控制哪些文件進(jìn)入 WEB-INF/classes 文件夾和生成 web.xml 文件進(jìn)行了一些很好的補充。WAR 任務(wù)對指定 WAR 文件布局是非常有用的。

既然 WAR 任務(wù)是 JAR 任務(wù)的一個擴展,JAR 任務(wù)的所有的屬性都適用于 WAR 任務(wù)。

屬性 描述
webxml web.xml 文件的路徑
lib 指定什么文件可以進(jìn)入 WEB-INF\lib 文件夾的一個組
classes 指定什么文件可以進(jìn)入 WEB-INF\classes 文件夾的一個組
metainf 指定生成 MANIFEST.MF 文件的指令

繼續(xù)我們的 Hello World 傳真應(yīng)用項目,讓我們添加一個新的目標(biāo)來生成 jar 文件。 但是在此之前,我們需要考慮一下 war 任務(wù)。 請看下面的例子:

<war destfile = "fax.war" webxml = "${web.dir}/web.xml">

   <fileset dir = "${web.dir}/WebContent">
      <include name = "**/*.*"/>
   </fileset>

   <lib dir = "thirdpartyjars">
      <exclude name = "portlet.jar"/>
   </lib>

   <classes dir = "${build.dir}/web"/>

</war>

按照前面的例子中,web.dir 變量指向源 web 文件夾,即該文件包含 JSP,css 和 javascript 文件等等。

該 build.dir 變量指向輸出文件夾,WAR 的包能在該文件夾下找到。 通常情況下, 類將被綁定到 WAR 文件下的 WEB-INF/classes 文件夾下。

在這個例子中,我們創(chuàng)建了一個名為 fax.war 的 war 文件。WEB.XML 文件可以從 web 源文件中獲取。 所有 web 下來自 “WebContent” 的文件都被復(fù)制到 WAR 文件中。

WEB-INF/lib 文件夾中存儲了來自于第三方 jar 文件夾中的 jar 文件。但是,我們排除了 portlet.jar,因為該 jar 文件已經(jīng)存在于應(yīng)用服務(wù)器的 lib 文件夾中了。最后,我們從一個構(gòu)建目錄下的 web 文件夾中復(fù)制所有的類,并將復(fù)制的類全部放入 WEB-INF/classes 文件夾下。

將一個 war 任務(wù)封裝到一個 Ant 任務(wù)中并運行它。 這將在指定位置創(chuàng)建一個 WAR 文件。

類,庫,metainf 和 webinf 目錄完全可以進(jìn)行嵌套以使得他們都能存在于項目結(jié)構(gòu)下分散的文件夾中。 但是最佳的實踐建議是,你的 web 項目的 web 內(nèi)容架構(gòu)應(yīng)該與 WAR 文件類似。 傳真應(yīng)用項目的架構(gòu)就是使用了這個基本原理。

要執(zhí)行 war 任務(wù),將其封裝在一個目標(biāo)里面,最常見的是,構(gòu)建目標(biāo)或者是包目標(biāo),然后運行它們。

<target name="build-war">

   <war destfile="fax.war" webxml="${web.dir}/web.xml">
      <fileset dir="${web.dir}/WebContent">
         <include name="**/*.*"/>
      </fileset>

      <lib dir="thirdpartyjars">
         <exclude name="portlet.jar"/>
      </lib>

      <classes dir="${build.dir}/web"/>
   </war>

</target>

在這個文件上運行 Ant 會替我們創(chuàng)建 fax.war 文件。

下述的輸出就是運行 Ant 文件的結(jié)果:

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

>BUILD SUCCESSFUL
>Total time: 12.3 seconds

該 fax.war 文件當(dāng)前被放置在輸出文件夾中。war 文件的內(nèi)容如下所示:

>fax.war:
   >+---jsp :這個文件夾包含了 jsp 文件
   >+---css :這個文件夾包含了 stylesheet 文件
   >+---js :這個文件夾包含了  javascript 文件
   >+---images:這個文件夾包含了  image 文件
   >+---META-INF:這個文件夾包含了  Manifest.Mf
   >+---WEB-INF
           >+---classes :這個文件夾包含了編譯好的類
          >+---lib :第三方庫和使用程序 jar 文件
          >WEB.xml :定義 WAR 包的配置文件