解压缩 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.gif 和 LICENSE.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>