Unjar/Untar/Unwar/Unzip

說明

解壓縮 zip、war 或 jar 檔案。

PatternSet 用於選取要從檔案庫中提取的檔案。如果未用 PatternSet,則會提取所有檔案。

資源集合 可用於選取要執行解壓縮的檔案庫檔案。Unjar/Unwar/Unzip 僅支援基於檔案系統的資源集合,其中包括 filesetfilelistpathfilesUntar 支援任意資源集合。在 Apache Ant 1.7 之前,僅支援 fileset 作為巢狀元素。

您可以使用巢狀 mapper 元素定義檔案名稱轉換。預設 mapper 為 identity mapper

不會還原提取檔案的檔案權限。

untar 任務會辨識 GNU tar 使用的長路徑名稱項目。

請注意,在套用檔案的時區偏移計算時,不同的 ZIP 工具會以不同的方式處理時間戳。有些 ZIP 函式庫會將時間戳儲存為從檔案系統讀取的狀態,而其他函式庫會在讀取和寫入檔案時修改時間戳,以使所有時間戳使用相同的時區。由一個函式庫建立的 ZIP 檔案,在由另一個函式庫提取時,可能會提取出具有「錯誤時間戳」的檔案。

Ant 的 ZIP 類別使用與 InfoZIP 工具和 zlib 相同的演算法(時間戳會調整),Windows 的「壓縮資料夾」功能和 WinZIP 都不會變更時間戳。這表示,使用 unzip 任務處理由 Windows 的壓縮資料夾功能建立的檔案,可能會建立具有「錯誤」時間戳的檔案,如果您使用 Windows 的功能來提取由 Ant 產生的 ZIP 檔案,也會發生相同的情況。

參數

屬性 說明 必要
src 要展開的檔案庫檔案。 是,除非使用 fileset
dest 要儲存展開檔案的目錄。
overwrite 覆寫檔案,即使它們比檔案庫中的對應項目新(true|false)。 否;預設為 true
compression 注意:此屬性僅適用於 untar 任務。
壓縮方法。允許的值為 nonegzipxzbzip2
否;預設為 none
encoding zip 檔案內檔案名稱使用的字元編碼。有關可能值的清單,請參閱 支援的編碼
使用魔法值 native-encoding 表示預設 JVM 字元編碼。
另請參閱 zip 任務頁面中的討論
否;預設為 unzipUTF8untar 任務的預設 JVM 字元編碼
failOnEmptyArchive 嘗試提取空檔案庫是否為錯誤。自 Ant 1.8.0 起 否;預設為 false
stripAbsolutePathSpec 在解壓縮檔案之前,Ant 是否應從解壓縮的檔案名稱中移除開頭的 /\ 字元。請注意,這會在套用 include/exclude 模式以及使用巢狀對應器(如果有)之前變更條目名稱。自 Ant 1.8.0 起 否;預設為 true 自 Ant 1.10.4 起(在此之前預設為 false
scanForUnicodeExtraFields 注意:此屬性不適用於 untar 任務。
如果封存檔包含 Unicode 額外欄位,請使用它們來設定檔案名稱,並忽略指定的編碼。
另請參閱 zip 任務頁面中的討論
否;預設為 true
allowFilesToEscapeDest 是否允許解壓縮的檔案或目錄位於 dest 目錄之外。自 Ant 1.10.4 起 否,預設為 false,除非 stripAbsolutePathSpecfalse,且條目的名稱以開頭路徑規格開頭。

範例

<unzip src="${tomcat_src}/tools-src.zip" dest="${tools.home}"/>
<gunzip src="tools.tar.gz"/>
<untar src="tools.tar" dest="${tools.home}"/>
<unzip src="${tomcat_src}/tools-src.zip"
       dest="${tools.home}">
    <patternset>
        <include name="**/*.java"/>
        <exclude name="**/Test*.java"/>
    </patternset>
</unzip>
<unzip dest="${tools.home}">
    <patternset>
        <include name="**/*.java"/>
        <exclude name="**/Test*.java"/>
    </patternset>
    <fileset dir=".">
        <include name="**/*.zip"/>
        <exclude name="**/tmp*.zip"/>
    </fileset>
</unzip>
<unzip src="apache-ant-bin.zip" dest="${tools.home}">
    <patternset>
        <include name="apache-ant/lib/ant.jar"/>
    </patternset>
    <mapper type="flatten"/>
</unzip>

ant.jar 中解壓縮儲存在 jar 檔案的 images 目錄(或其下的某個位置)中的所有影像。在解壓縮時,目錄結構 (images) 將會保留。

<unzip src="${ant.home}/lib/ant.jar" dest="...">
  <patternset>
    <include name="images/"/>
  </patternset>
</unzip>

ant.jar 中解壓縮兩個檔案,ant_logo_large.gifLICENSE.txt。更精確地說:從來源檔案中的任何位置解壓縮具有這些名稱的所有檔案。在解壓縮時,目錄結構將會保留。

<unzip src="${ant.home}/lib/ant.jar" dest="...">
  <patternset>
    <include name="**/ant_logo_large.gif"/>
    <include name="**/LICENSE.txt"/>
  </patternset>
</unzip>

相關任務

任務

<unzip src="some-archive" dest="some-dir">
  <patternset>
    <include name="some-pattern"/>
  </patternset>
  <mapper type="some-mapper"/>
</unzip>

<copy todir="some-dir" preservelastmodified="true">
  <zipfileset src="some-archive">
    <patternset>
      <include name="some-pattern"/>
    </patternset>
  </zipfileset>
  <mapper type="some-mapper"/>
</copy>

相同,<untar><tarfileset> 也相同。<copy> 提供其他功能,例如動態篩選檔案,允許將檔案對應到多個目的地或可設定的檔案系統時間戳記粒度。

從 zipfile 中「刪除」檔案。

<zip destfile="new.jar">
  <zipfileset src="old.jar">
    <exclude name="do/not/include/this/class"/>
  </zipfileset>
</zip>