解JAR/解TAR/解WAR/解ZIP

描述

解压缩 ZIP、WAR 或 JAR 文件。

模式集 用于选择要从存档中提取的文件。如果没有使用模式集,则会提取所有文件。

资源集合 可用于选择要对其执行解压缩的存档文件。Unjar/Unwar/Unzip 仅支持基于文件系统的资源集合,包括 文件集文件列表路径文件Untar 支持任意资源集合。在 Apache Ant 1.7 之前,仅支持 fileset 作为嵌套元素。

您可以通过使用嵌套的 映射器 元素来定义文件名转换。默认映射器是 标识映射器

提取的文件不会恢复文件权限。

untar 任务识别 GNU tar 使用的长路径名条目。

请注意,不同的 ZIP 工具在应用文件的时区偏移计算方面处理时间戳的方式不同。一些 ZIP 库会将时间戳存储为从文件系统读取的时间戳,而另一些库会在读取和写入文件时修改时间戳,以使所有时间戳使用相同的时区。由一个库创建的 ZIP 存档在由另一个库提取时可能会提取具有“错误时间戳”的文件。

Ant 的 ZIP 类使用与 InfoZIP 工具和 zlib 相同的算法(时间戳会调整),Windows 的“压缩文件夹”功能和 WinZIP 不会更改时间戳。这意味着,对由 Windows 的压缩文件夹功能创建的文件使用 unzip 任务可能会创建具有“错误”时间戳的文件,如果您使用 Windows 的功能来提取 Ant 生成的 ZIP 存档,也会出现这种情况。

参数

属性 描述 必需
src 要展开的存档文件。 是,除非使用文件集
dest 存储展开文件的目录。
overwrite 覆盖文件,即使它们比存档中的相应条目更新(“true|false”)。 否;默认值为“true”
compression 注意:此属性仅适用于 untar 任务。
压缩方法。允许的值为“none”、“gzip”、“xz”和“bzip2”。
否;默认值为“none”
encoding 用于 ZIP 文件中文件名的字符编码。有关可能值的列表,请参阅 支持的编码
对于默认 JVM 字符编码,使用魔术值“native-encoding”。
另请参阅 zip 任务页面中的讨论
否;对于 unzip 任务默认为“UTF8”,对于 untar 任务默认为默认 JVM 字符编码
failOnEmptyArchive 尝试提取空存档是否为错误。自 Ant 1.8.0 起 否;默认值为“false”
stripAbsolutePathSpec Ant 是否应在提取文件之前从提取的文件名中删除前导“/”或“\”字符。请注意,这会在应用 include/exclude 模式和使用嵌套映射器(如果有)之前更改条目名称。自 Ant 1.8.0 起 否;自 Ant 1.10.4 起默认为“true”(在此之前默认为“false”)
scanForUnicodeExtraFields 注意:此属性不适用于 untar 任务。
如果存档包含 Unicode 扩展字段,则使用它们来设置文件名,忽略指定的编码。
另请参阅 zip 任务页面中的讨论
否;默认值为“true”
allowFilesToEscapeDest 是否允许提取的文件或目录位于 dest 目录之外。自 Ant 1.10.4 起 否,默认为“false”,除非 stripAbsolutePathSpec 为“false”且条目的名称以前导路径规范开头。

示例

<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> 提供了其他功能,例如 动态过滤文件,允许将文件映射到多个目标或可配置的文件系统时间戳粒度。

从 ZIP 文件中“删除”文件。

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