戰爭

描述

擴充 Jar 任務,針對應結束於 Web 應用程式封存的 WEB-INF/libWEB-INF/classesWEB-INF 目錄中的檔案進行特殊處理。

War 任務是指定 WAR 檔案特定配置的捷徑。使用 ZipJar 任務中的 zipfilesetprefixfullpath 屬性,可以達成相同的目的。)

War 任務中可以使用 zip 任務中擴充的 zipfileset 元素(含 prefixfullpathsrc 屬性)。任務也啟用了資源,將新增巢狀資源和資源集合至封存。

在 Servlet API 2.5/Java EE 5 之前,WAR 檔案中一定要有 WEB-INF/web.xml 檔案,所以如果缺少 webxml 屬性,此任務會失敗。由於 web.xml 檔案現在是選用的,webxml 屬性現在也可以是選用的。然而,由於大多數真正的 Web 應用程式都需要 web.xml 檔案,所以預設並非選用。如果未包含檔案,任務將會失敗,除非 needxmlfile 屬性設為 false。如果透過檔案集將多個 web.xml 檔案新增至 JAR,任務將會發出警告。

請注意,Zip 格式允許單一封存中存在多個完全限定名稱相同的檔案。已記錄此情況會對不知情的使用者造成各種問題。如果您想避免這種行為,您必須將 duplicate 屬性設為預設值 add 以外的值。

參數

屬性 描述 必要
destfile 要建立的 WAR 檔案。 兩個選項中必須擇一
warfile 已棄用 要建立的檔案名稱—改用 destfile
webxml 要使用的 servlet 組態描述符 (WEB-INF/web.xml). 是,除非 needxmlfiletrue,檔案透過巢狀檔案集提取,或正在更新現有的 WAR 檔案。
needxmlfile 旗標,用來表示是否需要 web.xml 檔案。在產生沒有 web.xml 檔案的 servlet 2.5+ WAR 檔案時,應將其設為 false自 Apache Ant 1.7 起 否;預設為 true
basedir 要將檔案打包成 jar 的目錄。
compress 不僅儲存資料,還會壓縮資料。除非您將 keepcompression 屬性設為 false,否則這將套用至整個封存,而不僅是您在更新時新增的檔案。 否;預設為 true
keepcompression 對於來自現有檔案(例如嵌套的 zipfileset 或在更新檔案時)的項目,保持壓縮,就像它最初那樣,而不是使用 compress 屬性。自 Ant 1.6 起 否;預設為 false
encoding 用於檔案中檔名的字元編碼。不建議變更此值,否則建立的檔案很可能會無法用 Java 讀取。
另請參閱 zip 任務頁面中的討論
否;預設為 UTF8
filesonly 僅儲存檔案項目 否;預設為 false
includes 必須包含的檔案模式的逗號或空格分隔清單。 否;預設為全部 (**)
includesfile 檔案名稱。此檔案的每一行都被視為包含模式
excludes 必須排除的檔案模式的逗號或空格分隔清單。 否;預設為預設排除或如果 defaultexcludesno 則為無
excludesfile 檔案名稱。此檔案的每一行都被視為排除模式
defaultexcludes 表示是否應使用預設排除(yes|no)。 否;預設為 yes
manifest 要使用的明細檔。
filesetmanifest zipfilesetzipgroupfileset 檔案中找到明細檔時的行為。有效值為 skipmergemergewithoutmainmerge 會將所有明細檔合併在一起,並將其合併到任何其他指定的明細檔中。mergewithoutmain 會合併明細檔的所有部分,但主部分除外。 否;預設為 skip
whenmanifestonly 當沒有檔案相符時的行為。有效值為 failskipcreate 否;預設為 create
update 表示是否在目標檔案已存在時更新或覆寫它。 否;預設為 false
duplicate 找到重複檔案時的行為。有效值為 addpreservefail 否;預設為 add
roundup 檔案修改時間是否會向上取整到下一偶數秒數。
Zip 檔案儲存檔案修改時間的粒度為 2 秒,因此時間將會向上或向下取整。如果您向下取整,則在您重新執行工作時,檔案將永遠顯示為過期,因此預設值是向上取整。向上取整可能會導致其他類型的問題,例如 Web 檔案中的 JSP 看起來比預先編譯的頁面稍新,使預先編譯變得毫無用處。自 Ant 1.6.2 起
否;預設為 true
層級 執行檔案壓縮時,非預設的層級。有效值範圍從 0(無壓縮/最快)到 9(最大壓縮/最慢)。自 Ant 1.7 起
保留 0 權限 更新檔案或從其他檔案新增項目時,Ant 會假設 Unix 權限值 0(任何人都不允許對檔案/目錄執行任何操作)表示權限尚未儲存,而不是實際權限,並會套用其自己的預設值。
如果您真的想要保留原始權限欄位,請將此屬性設定為 true自 Ant 1.8.0 起
否;預設值為 false
使用語言編碼旗標 如果編碼為 UTF-8,是否設定語言編碼旗標。如果編碼不是 UTF-8,此設定不會有任何效果。自 Ant 1.8.0 起
另請參閱 zip 任務頁面中的討論
否;預設為 true
建立 Unicode 額外欄位 是否建立 Unicode 額外欄位,以將檔案名稱第二次儲存在項目的元資料中。
可能的值為 neveralwaysnot-encodeable,如果無法使用指定的編碼編碼檔案名稱,則只會新增 Unicode 額外欄位。自 Ant 1.8.0 起
另請參閱 zip 任務頁面中的討論
否;預設值為 never
備援為 UTF-8 如果無法使用指定的編碼編碼檔案名稱,是否使用 UTF-8 和語言編碼旗標,而不是指定的編碼。自 Ant 1.8.0 起
另請參閱 zip 任務頁面中的討論
否;預設值為 false
合併類別路徑屬性 是否合併在不同清單中找到的 Class-Path 屬性(如果合併清單)。如果為 false,則只會保留最後合併清單的屬性。自 Ant 1.8.0 起
除非您也將 flattenAttributes 設定為 true,否則這可能會導致清單包含多個 Class-Path 屬性,這會違反清單規格。
否;預設值為 false
扁平化屬性 是否將在區段中出現多次的屬性(這只會發生在 Class-Path 屬性)合併成單一屬性。自 Ant 1.8.0 起 否;預設值為 false
zip64 模式 何時對項目使用 Zip64 擴充功能。可能的數值為 neveralwaysas-needed自 Ant 1.9.1 起
另請參閱 zip 任務頁面中的討論
否;預設值為 never
modificationtime 將所有儲存的檔案修改時間設定為指定時間。這可以是數字(解譯為自 1970-01-01T00:00:00Z 起的毫秒數)或可以解析為 ISO 8601 時間戳記(含選用時區)的字串。自 Ant 1.10.2 起

指定為巢狀元素的參數

lib

巢狀 lib 元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF/lib 目錄中。

classes

巢狀 classes 元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF/classes 目錄中。

webinf

巢狀 webinf 元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF 目錄中。如果此檔案集中包含名為 web.xml 的檔案,則檔案會被忽略,而且您會收到警告。

metainf

巢狀 metainf 元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 META-INF 目錄中。如果此檔案集中包含名為 MANIFEST.MF 的檔案,則檔案會被忽略,而且您會收到警告。

manifest、indexjars、service

這些繼承自 <jar>

範例

假設專案基本目錄中的結構如下

thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif

然後使用下列指令建立的 war 檔案 myapp.war

<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
  <fileset dir="src/html/myapp"/>
  <fileset dir="src/jsp/myapp"/>
  <lib dir="thirdparty/libs">
    <exclude name="jdbc1.jar"/>
  </lib>
  <classes dir="build/main"/>
  <zipfileset dir="src/graphics/images/gifs"
              prefix="images"/>
</war>

將包含

WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
使用 Ant 的預設清單檔案。WEB-INF/web.xml 的內容與 src/metadata/myapp.xml 相同。

我們經常收到錯誤報告,指出此任務將 WEB-INF 目錄建立為 web-inf(全部小寫),因此導致您的 Web 應用程式無法運作,而這是我們的錯。這些抱怨的原因在於 WinZip,它會將全部大寫的目錄轉換為全部小寫,以提供協助。請檢查 jar xvf yourwebapp.war 是否顯示相同的行為,然後再提出報告。
WinZip 有個選項允許所有大寫名稱(預設為關閉!)。可透過以下方式啟用:選單 選項組態檢視 屬性/分頁標籤,然後 一般 群組方塊有一個選項稱為 允許所有大寫檔案名稱