<!--
   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

       https://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>Uncompressing Tasks</title>
</head>

<body>

<h2><a name="unpack">Uncompressing Tasks</a></h2>
<h3>Description</h3>

<p>For each of the supported compression formats there is a
  correspondig task that uncompresses a resource.  These tasks are
  based on
  their <a href="https://ant.apache.org/manual/CoreTasks/unpack.html">core
  cousin tasks</a>.</p>

<p>If <i>dest</i> is a directory the name of the destination file is
the same as <i>src</i> (with the compression specific
extension removed if present). If <i>dest</i> is omitted, the parent
dir of <i>src</i> is taken. The file is only expanded if the source
resource is newer than the destination file, or when the destination file
does not exist.</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">the file to expand.</td>
    <td align="center" valign="top">Yes, or a nested resource collection.</td>
  </tr>
  <tr>
    <td valign="top">dest</td>
    <td valign="top">the destination file or directory.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">
      <a name="decompressConcatenated">decompressConcatenated</a></td>
    <td valign="top">Only for the formats that support files holding
      multiple compressed streams (bzip2, gzip and xz).<br/>
      If set to true all streams will be concatenated and treated as a
      single resource.  With the default value false only the first
      stream is uncompressed.</td>
    <td align="center" valign="top">No</td>
  </tr>
</table>
<h3>Parameters specified as nested elements</h3>

<h4>any <a href="https://ant.apache.org/manual/CoreTypes/resources.html">resource</a> or single element
resource collection</h4>

<p>The specified resource will be used as src.</p>

<h3><a name="bunzip2">BUnZip2</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the BZIP2
  compression algorithm.</p>

<p>This task supports
  the <a href="#decompressConcatenated">decompressConcatenated</a>
  attribute.</p>

<h3><a name="gunzip">GUnZip</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the GZIP
  compression algorithm.</p>

<p>This task supports
  the <a href="#decompressConcatenated">decompressConcatenated</a>
  attribute.</p>

<h3><a name="unbrotli">unbrotli</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the Brotli
  compression algorithm.</p>

  <p><em>Since Compress Antlib 1.5</em>

<h3><a name="undeflate">Undeflate</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the DEFLATE
  compression algorithm.</p>

  <p><em>Since Compress Antlib 1.5</em>

  <p>This task supports the following additional 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">zlibheader</td>
      <td valign="top">Whether to expect ZLIB headers. Unfortunately
      it is currently not possible to detect whether zlib headers have
      been used.</td>
      <td valign="top" align="center">No, defaults to <code>true</code></td>
    </tr>
  </table>

<h3><a name="undeflate64">Undeflate64</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the DEFLATE64
  compression algorithm.</p>

  <p><em>Since Compress Antlib 1.6</em>

<h3><a name="unlz4">UnLZ4</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the LZ4
  compression algorithm.</p>

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

<p>This task supports
  the <a href="#decompressConcatenated">decompressConcatenated</a>
  attribute if the frame format is used.</p>

<h4>Parameters</h4>
  <p>In addition to the attributes supported by all uncompressing task
    this task also supports.</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">framed</td>
      <td valign="top">Whether the input is expected to use
      the <a href="https://lz4.github.io/lz4/lz4_Frame_format.html">frame
     format</a>.</td>
      <td align="center" valign="top">No, defaults to true.</td>
    </tr>
  </table>

  <h3><a name="unlzma">UnLZMA</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the LZMA
  compression algorithm.</p>

<h3><a name="unpack200">Unpack200</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses
  the <a href="https://download.oracle.com/javase/1.5.0/docs/api/java/util/jar/Pack200.html">Pack200</a>
  compression algorithm.</p>

<p>This task does not work on defalted archives, you need to wrap
  deflated archives into <code>gunzipresource</code>s in order to use
  them.

  <h4>Parameters</h4>
  <p>In addition to the attributes supported by all uncompressing task
    this task also supports.</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">pack200strategy</td>
      <td valign="top">Apache Commons Compress' Pack200 streams cache
        the archive data either in memory or in a temporary file.
        User this attribute to control which strategy is chosen.
        Valid values are "in-memory" and "temp-file".</td>
      <td align="center" valign="top">No, defaults to in-memory.</td>
    </tr>
  </table>

  <h4>Parameters specified as nested elements</h4>
  <p>In addition to the nested elements supported by all uncompressing task
    this task also supports.</p>

  <h5>property</h5>

  <p>Sets a property for the unpacker (see the Pack200 javadocs for
    details).</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">key</td>
      <td valign="top">Name of the property.</td>
      <td align="center" valign="top">Yes.</td>
    </tr>
    <tr>
      <td valign="top">value</td>
      <td valign="top">Value of the property.</td>
      <td align="center" valign="top">Yes.</td>
    </tr>
  </table>

<h3><a name="unsnappy">UnSnappy</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses
  the <a href="https://github.com/google/snappy">Snappy</a>
  compression algorithm.</p>

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

<h4>Parameters</h4>
  <p>In addition to the attributes supported by all uncompressing task
    this task also supports.</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">framed</td>
      <td valign="top">Whether the input is expected to use
      the <a href="https://github.com/google/snappy/blob/master/framing_format.txt">framing
     format</a>.</td>
      <td align="center" valign="top">No, defaults to true.</td>
    </tr>
  </table>

<h3><a name="unxz">UnXZ</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the XZ
  compression algorithm.</p>

<p>This task supports
  the <a href="#decompressConcatenated">decompressConcatenated</a>
  attribute.</p>

<h3><a name="unz">UnZ</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the .Z
  compression algorithm.</p>

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

<h3><a name="unzstd">UnZstd</a></h3>

<p>Is an <a href="#unpack">uncompressing task</a> that uses the Zstandard
  compression algorithm.</p>

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

<h3>Examples</h3>
<blockquote><pre>
&lt;cmp:gunzip src=&quot;test.tar.gz&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre></blockquote>
<p>expands <i>test.tar.gz</i> to <i>test.tar</i></p>
<blockquote><pre>
&lt;cmp:bunzip2 src=&quot;test.tar.bz2&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre></blockquote>
<p>expands <i>test.tar.bz2</i> to <i>test.tar</i></p>
<blockquote><pre>
&lt;cmp:gunzip src=&quot;test.tar.gz&quot; dest=&quot;test2.tar&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre></blockquote>
<p>expands <i>test.tar.gz</i> to <i>test2.tar</i></p>
<blockquote><pre>
&lt;cmp:gunzip src=&quot;test.tar.gz&quot; dest=&quot;subdir&quot; xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre></blockquote>
<p>expands <i>test.tar.gz</i> to <i>subdir/test.tar</i> (assuming
subdir is a directory).</p>
<blockquote><pre>
&lt;cmp:gunzip dest=&quot;.&quot; xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;url url="https://example.org/archive.tar.gz"/&gt;
&lt;/cmp:gunzip&gt;
</pre></blockquote>
<p>downloads <i>https://example.org/archive.tar.gz</i> and expands it
to <i>archive.tar</i> in the project's basedir on the fly.</p>
<blockquote><pre>
&lt;cmp:unpack200 dest=&quot;foo.jar&quot; xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;cmp:gzipresource&gt;
    &lt;file file="foo.pack.gz"/&gt;
  &lt;/cmp:gzipresource&gt;
&lt;/cmp:unpack200&gt;
</pre></blockquote>
<p>Unpacks the deflated Pack200 archive <i>foo.pack.gz</i> and stores
  it as <i>foo.jar</i>.</p>

<h3>Related tasks</h3>

<pre>
&lt;cmp:gunzip src="some-archive.gz" dest="some-dest-dir" xmlns:cmp="antlib:org.apache.ant.compress"/&gt;
</pre>

is identical to

<pre>
&lt;copy todir="some-dest-dir"&gt;
  &lt;cmp:gzipresource xmlns:cmp="antlib:org.apache.ant.compress"&gt;
    &lt;file file="some-archive.gz"/&gt;
  &lt;/cmp:gzipresource&gt;
  &lt;mapper type="glob" from="*.gz" to="*"/&gt;
&lt;/copy&gt;
</pre>

<p>The same is also true for <code>&lt;bunzip2&gt;</code> and
<code>&lt;bzip2resource&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, preserving the
last modified time or a configurable file system timestamp
granularity.</p>

</body>
</html>
