擴充 Jar 任務,針對應結束於 Web 應用程式封存的 WEB-INF/lib、WEB-INF/classes 或 WEB-INF 目錄中的檔案進行特殊處理。
(War
任務是指定 WAR 檔案特定配置的捷徑。使用 Zip
或 Jar
任務中的 zipfileset
的 prefix 和 fullpath 屬性,可以達成相同的目的。)
War
任務中可以使用 zip
任務中擴充的 zipfileset
元素(含 prefix、fullpath 和 src 屬性)。任務也啟用了資源,將新增巢狀資源和資源集合至封存。
在 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). | 是,除非 needxmlfile 為 true,檔案透過巢狀檔案集提取,或正在更新現有的 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 | 必須排除的檔案模式的逗號或空格分隔清單。 | 否;預設為預設排除或如果 defaultexcludes 為 no則為無 |
excludesfile | 檔案名稱。此檔案的每一行都被視為排除模式 | 否 |
defaultexcludes | 表示是否應使用預設排除(yes|no)。 |
否;預設為 yes |
manifest | 要使用的明細檔。 | 否 |
filesetmanifest | 在 zipfileset 或 zipgroupfileset 檔案中找到明細檔時的行為。有效值為 skip、 merge和 mergewithoutmain。 merge會將所有明細檔合併在一起,並將其合併到任何其他指定的明細檔中。 mergewithoutmain會合併明細檔的所有部分,但主部分除外。 |
否;預設為 skip |
whenmanifestonly | 當沒有檔案相符時的行為。有效值為 fail、 skip和 create。 |
否;預設為 create |
update | 表示是否在目標檔案已存在時更新或覆寫它。 | 否;預設為 false |
duplicate | 找到重複檔案時的行為。有效值為 add、 preserve和 fail。 |
否;預設為 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 額外欄位,以將檔案名稱第二次儲存在項目的元資料中。 可能的值為 never、 always和 not-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 擴充功能。可能的數值為 never、 always和 as-needed。自 Ant 1.9.1 起。 另請參閱 zip 任務頁面中的討論 |
否;預設值為 never |
modificationtime | 將所有儲存的檔案修改時間設定為指定時間。這可以是數字(解譯為自 1970-01-01T00:00:00Z 起的毫秒數)或可以解析為 ISO 8601 時間戳記(含選用時區)的字串。自 Ant 1.10.2 起。 | 否 |
巢狀 lib
元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF/lib 目錄中。
巢狀 classes
元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF/classes 目錄中。
巢狀 webinf
元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 WEB-INF 目錄中。如果此檔案集中包含名為 web.xml 的檔案,則檔案會被忽略,而且您會收到警告。
巢狀 metainf
元素指定 FileSet。包含在此檔案集中的所有檔案最後會出現在 war 檔案的 META-INF 目錄中。如果此檔案集中包含名為 MANIFEST.MF 的檔案,則檔案會被忽略,而且您會收到警告。
假設專案基本目錄中的結構如下
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 有個選項允許所有大寫名稱(預設為關閉!)。可透過以下方式啟用:選單 選項
→ 組態
,檢視
屬性/分頁標籤,然後 一般
群組方塊有一個選項稱為 允許所有大寫檔案名稱
。