<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Unarchiving Task</title>
</head>

<body>

<h2><a name="expand">Unarchiving Tasks</a></h2>

<p>For each of the supported archiving formats there is a
  correspondig <code>unarchiving</code> task.  These tasks are based
  on
  their <a href="https://ant.apache.org/manual/CoreTasks/unzip.html">core
  cousin tasks</a>.</p>

<p><a href="https://ant.apache.org/manual/CoreTypes/patternset.html">PatternSet</a>s are used to select files to extract
<I>from</I> the archive.  If no patternset is used, all files are extracted.
</p>

<p><a href="https://ant.apache.org/manual/CoreTypes/resources.html#collection">Resource
Collection</a>s may be used to select archived files to perform
unarchival upon.</p>

<p>You can define filename transformations by using a
nested <a href="https://ant.apache.org/manual/CoreTypes/mapper.html">mapper</a>
element.  The default mapper is the
<a href="https://ant.apache.org/manual/CoreTypes/mapper.html#identity-mapper">identity
mapper</a>.</p>

<p>File permissions will not be restored on extracted files.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">src</td>
    <td valign="top">archive file to expand.</td>
    <td align="center" valign="top">Yes, if filesets are not used.</td>
  </tr>
  <tr>
    <td valign="top">dest</td>
    <td valign="top">directory where to store the expanded files.</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">overwrite</td>
    <td valign="top">Overwrite files, even if they are newer than the
      corresponding entries in the archive (true or false, default is
      true).</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">failOnEmptyArchive</td>
    <td valign="top">whether trying to extract an empty archive is an
      error.</td>
    <td valign="top" align="center">No, defaults to false</td>
  </tr>
  <tr>
    <td valign="top">stripAbsolutePathSpec</td>
    <td valign="top">whether Ant should remove leading '/' or '\'
      characters from the extracted file name before extracing it.
      Note that this changes the entry's name before applying
      include/exclude patterns and before using the nested mappers (if
      any).</td>
    <td valign="top" align="center">No, defaults to false</td>
  </tr>
  <tr>
    <td valign="top">skipUnreadableEntries</td>
    <td valign="top">Sometimes archives may contain entries that use
      features not (yet) supported by Apache Commons Compress,
      encryption for example.  Trying to expand such an archive will
      normally lead to an error.  Sometimes Commons Compress can
      signal it doesn't know how to handle an entry and if you set 
      <code>skipUnreadableEntries</code> to true, the Compress Antlib
      will simply skip those entries, avoiding the error.
      <br/><em>since Compress Antlib 1.1</em></td>
    <td valign="top" align="center">No, defaults to false</td>
  </tr>
</table>

<h3><a name="un7z">Un7z</a></h3>

<p><em>Since Apache Compress Antlib 1.3</em>.</p>

<p>An <a href="#expand">unarchiving task</a> for 7z archives.</p>

<p>As of version 1.3 of the Compress Antlib this task can only work on
  file based resources.</p>

<h3><a name="unar">UnAr</a></h3>

<p>An <a href="#expand">unarchiving task</a> for AR archives.</p>

<p>Traditionally the AR format doesn't allow file names longer than 16
  characters.  There are two variants that circumvent this limitation
  in different ways, the GNU/SRV4 and the BSD variant; both of which
  are transparently supported since Commons Compress 1.3.</p>

<h3><a name="unarj">UnArj</a></h3>

<p><em>Since Apache Compress Antlib 1.3</em>.</p>

<p>An <a href="#expand">unarchiving task</a> for arj archives.</p>

<p>In addition to the parameters above, the unarj tasks supports the
  following attributes:</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">
    The character encoding that has been used for filenames
    inside the arj file.  For a list of possible values see <a
    href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html</a>.<br>
    Defaults <code>native-encoding</code> which is the magic value for
    the platform's default character encoding.<br/>
    <em>since Compress Antlib 1.3</em></td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h3><a name="uncpio">UnCpio</a></h3>

<p>An <a href="#expand">unarchiving task</a> for CPIO archives.</p>

<p>In addition to the parameters above, the uncpio tasks supports the
  following attributes:</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">
    The character encoding that has been used for filenames
    inside the cpio file.  For a list of possible values see <a
    href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html</a>.<br>
    Defaults <code>native-encoding</code> which is the magic value for
    the platform's default character encoding.<br/>
    <em>since Compress Antlib 1.3</em></td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h3><a name="undump">UnDump</a></h3>

<p><em>Since Apache Compress Antlib 1.1</em>.</p>

<p>An <a href="#expand">unarchiving task</a> for Unix dump archives.</p>

<p>In addition to the parameters above, the undump tasks supports the
  following attributes:</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">
    The character encoding that has been used for filenames
    inside the dump file.  For a list of possible values see <a
    href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html</a>.<br>
    Defaults <code>native-encoding</code> which is the magic value for
    the platform's default character encoding.<br/>
    <em>since Compress Antlib 1.3</em></td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h3><a name="untar">UnTar</a></h3>

<p>An <a href="#expand">unarchiving task</a> for TAR archives.</p>

<p>In addition to the parameters above, the untar tasks supports the
  following attributes:</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">
    The character encoding that has been used for filenames
    inside the tar file.  For a list of possible values see <a
    href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html</a>.<br>
    Defaults <code>native-encoding</code> which is the magic value for
    the platform's default character encoding.<br/>
    <em>since Compress Antlib 1.2</em></td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h3><a name="unzip">UnZip</a></h3>

<p>An <a href="#expand">unarchiving task</a> for ZIP archives.</p>

<p><b>Please note</b> that different ZIP tools handle timestamps
differently when it comes to applying timezone offset calculations of
files.  Some ZIP libraries will store the timestamps as they've been
read from the filesystem while others will modify the timestamps both
when reading and writing the files to make all timestamps use the same
timezone.  A ZIP archive created by one library may extract files with
"wrong timestamps" when extracted by another library.</p>

<p>Apache Commons Compress' ZIP classes use the same algorithm as the
InfoZIP tools and zlib (timestamps get adjusted), Windows' "compressed
folders" function and WinZIP don't change the timestamps.  This means
that using the unzip task on files created by Windows' compressed
folders function may create files with timestamps that are "wrong",
the same is true if you use Windows' functions to extract an Ant
generated ZIP archive.</p>

<p>Unlike its counterpart in Ant's core this Antlib's task can also
  extract archives that are not file system resources.</p>

<p>In addition to the parameters above, the unzip tasks supports the
  following attributes:</p>

<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">
    The character encoding that has been used for filenames
    inside the zip file.  For a list of possible values see <a
    href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html</a>.<br>
    Defaults to &quot;UTF8&quot;, use the magic value
    <code>native-encoding</code> for the platform's default character
    encoding.
      <br/>See also the <a href="https://ant.apache.org/manual/CoreTasks/zip.html#encoding">discussion in the
      zip task page</a></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">scanForUnicodeExtraFields</td>
    <td valign="top">
      If the archive contains uncode extra fields then use them to set
      the file names, ignoring the specified encoding.
      <br/>See also the <a href="https://ant.apache.org/manual/CoreTasks/zip.html#encoding">discussion in the
      zip task page</a></td>
    <td align="center" valign="top">No, defaults to true</td>
  </tr>
</table>

<h3>Examples</h3>
<pre>
&lt;cmp:unzip src=&quot;${tomcat_src}/tools-src.zip&quot;
    dest=&quot;${tools.home}&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre>
<p>
<pre>
&lt;cmp:gunzip src=&quot;tools.tar.gz&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
&lt;cmp:untar src=&quot;tools.tar&quot; dest=&quot;${tools.home}&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre>
<pre>
&lt;cmp:unzip src=&quot;${tomcat_src}/tools-src.zip&quot;
       xmlns:cmp="antlib:org.apache.ant.compress"
       dest=&quot;${tools.home}&quot;&gt;
    &lt;patternset&gt;
        &lt;include name=&quot;**/*.java&quot;/&gt;
        &lt;exclude name=&quot;**/Test*.java&quot;/&gt;
    &lt;/patternset&gt;
&lt;/cmp:unzip&gt;
</pre>
<p>
<pre>
&lt;cmp:unzip dest=&quot;${tools.home} xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
    &lt;patternset&gt;
        &lt;include name=&quot;**/*.java&quot;/&gt;
        &lt;exclude name=&quot;**/Test*.java&quot;/&gt;
    &lt;/patternset&gt;
    &lt;fileset dir=&quot;.&quot;&gt;
        &lt;include name=&quot;**/*.zip&quot;/&gt;
        &lt;exclude name=&quot;**/tmp*.zip&quot;/&gt;
    &lt;/fileset&gt;
&lt;/cmp:unzip&gt;
</pre>
<p>
<pre>
&lt;cmp:unzip src=&quot;apache-ant-bin.zip&quot;
    dest=&quot;${tools.home}&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"&gt;
    &lt;patternset&gt;
        &lt;include name=&quot;apache-ant/lib/ant.jar&quot;/&gt;
    &lt;/patternset&gt;
    &lt;mapper type=&quot;flatten&quot;/&gt;
&lt;/cmp:unzip&gt;
</pre>

<pre>
&lt;cmp:unzip src=&quot;${ant.home}/lib/ant.jar&quot;
    dest=&quot;...&quot; xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;patternset&gt;
    &lt;include name=&quot;images/&quot;/&gt;
  &lt;/patternset&gt;
&lt;/cmp:unzip&gt;
</pre>
<p>This extracts all images from <tt>ant.jar</tt> which are stored in the <tt>images</tt> directory
of the Jar (or somewhere under it). While extracting the directory structure (<tt>images</tt>)
will be taken.</p>

<pre>
&lt;cmp:unzip src=&quot;${ant.home}/lib/ant.jar&quot;
    dest=&quot;...&quot; xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;patternset&gt;
    &lt;include name=&quot;**/ant_logo_large.gif&quot;/&gt;
    &lt;include name=&quot;**/LICENSE.txt&quot;/&gt;
  &lt;/patternset&gt;
&lt;/cmp:unzip&gt;
</pre>
<p>This extracts the two files <tt>ant_logo_large.gif</tt> and <tt>LICENSE.txt</tt> from the
<tt>ant.jar</tt>. More exactly: it extracts all files with these names from anywhere in the source file. While extracting the directory structure will be taken.</p>

<h3>Related tasks</h3>

<pre>
&lt;cmp:unzip src="some-archive" dest="some-dir" xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;patternset&gt;
    &lt;include name="some-pattern"/&gt;
  &lt;/patternset&gt;
  &lt;mapper type=&quot;some-mapper&quot;/&gt;
&lt;/cmp:unzip&gt;
</pre>

is identical to

<pre>
&lt;copy todir="some-dir" preservelastmodified="true"&gt;
  &lt;cmp:zipfileset src="some-archive" xmlns:cmp="antlib:org.apache.ant.compress"&gt;
    &lt;patternset&gt;
      &lt;include name="some-pattern"/&gt;
    &lt;/patternset&gt;
  &lt;/cmp:zipfileset&gt;
  &lt;mapper type=&quot;some-mapper&quot;/&gt;
&lt;/copy&gt;
</pre>

<p>The same is also true for <code>&lt;untar&gt;</code> and
<code>&lt;tarfileset&gt;</code>.  <code>&lt;copy&gt;</code> offers
additional features
like <a href="https://ant.apache.org/manual/CoreTypes/filterchain.html">filtering
files</a> on the fly, allowing a file to be mapped to multiple
destinations or a configurable file system timestamp granularity.</p>

<pre>&lt;cmp:zip destfile=&quot;new.jar&quot; xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;cmp:zipfileset src=&quot;old.jar&quot;&gt;
    &lt;exclude name=&quot;do/not/include/this/class&quot;/&gt;
  &lt;/cmp:zipfileset&gt;
&lt;/cmp:zip&gt;
</pre>
<p>&quot;Deletes&quot; files from a zipfile.</p>

</body>
</html>
