<!--
   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>Archiving Task</title>
</head>

<body>

  <h2><a name="archive">Archiving Tasks</a></h2>

  <p>For each of the supported archiving formats there is a
    correspondig <code>archiving</code> task.  These tasks are
    supersets of the
    core <a href="http://ant.apache.org/manual/CoreTasks/tar.html">tar</a>
    and <a href="http://ant.apache.org/manual/CoreTasks/zip.html">zip</a>
    tasks but don't share any code with them.  Note that some
    attributes may use different defaults from the core tasks or some
    functionality may be available in different ways than with the core
    tasks - see the <a href="#tar">tar</a> and <a href="#zip">zip</a>
    documentation for details.</p>

  <p>If some of the nested resources that shall be added to the
    archive are archive resources themselves - i.e. they come from one
    of this Antlib's <a href="entry.html"><code>entry</code></a> or
    <a href="fileset.html"><code>fileset</code></a> resources or are
    core <a href="http://ant.apache.org/manual/CoreTypes/resources.html#tarentry"><code>tarentry</code></a>
    or <a href="http://ant.apache.org/manual/CoreTypes/resources.html#zipentry"><code>zipentry</code></a>
    resources or returned by a
    core <a href="http://ant.apache.org/manual/CoreTypes/tarfileset.html"><code>tarfileset</code></a>
    or <a href="http://ant.apache.org/manual/CoreTypes/zipfileset.html"><code>zipfileset</code></a>
    - the task will try to preserve the entry's permissions and as
    many other attributes of the entry as the archiving format
    supports.</p>

  <p>All archiving tasks share the following attributes and nested
    elements:</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">dest</td>
      <td valign="top">the destination resource to create.</td>
      <td align="center" valign="top" rowspan="2">Exactly one of the
        two or a nested dest element.</td>
    </tr>
    <tr>
      <td valign="top">destfile</td>
      <td valign="top">the destination file to create.</td>
    </tr>
    <tr>
      <td valign="top">encoding</td>
      <td valign="top">The character encoding to use for filenames
        inside the archive.  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>.
        The magic value
        <code>native-encoding</code> can be used to explicitly select
        the platform's default character encoding.  Defaults to the
        platform's default character encoding.<br/>
        Currently ignored by all but the tar (<em>since Compress
        Antlib 1.2</em>), cpio (<em>since Compress
        Antlib 1.3</em>) and zip tasks.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">filesonly</td>
      <td valign="top">Store only file entries, defaults to true</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">preserve0permissions</td>
      <td valign="top">when updating an archive or adding entries from a
        different archive Ant will assume that a Unix permissions value of
        0 (nobody is allowed to do anything to the file/directory) means
        that the permissions haven't been stored at all rather than real
        permissions and will instead apply its own default values.<br/>
        Set this attribute to true if you really want to preserve the
        original permission field.
        Default is false.
      </td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">roundup</td>
      <td valign="top">Whether the file modification times will be
        rounded up taking the timestamp granularity of the archiving
        format into account.  ZIP archives store file modification
        times with a granularity of two seconds, the other formats use
        a single second as granularity.<br/>

        Times will either be rounded up or down.  If you round down,
        the archive will always seem out-of-date when you rerun the
        task, so the default is to round up.  Rounding up may lead to
        a different type of problems like JSPs inside a web archive
        that seem to be slightly more recent than precompiled pages,
        rendering precompilation useless.<br/>

        Defaults to true.
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">preserveLeadingSlashes</td>
      <td valign="top">Indicates whether leading `/'s should
        be preserved in the file names. Default is <code>false</code>.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">duplicate</td>
      <td valign="top">behavior when a duplicate entry is found.
        Valid values are &quot;add&quot;, &quot;preserve&quot;, and
        &quot;fail&quot;. The default value is
        &quot;fail&quot;.  </td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">whenempty</td>
      <td valign="top">behavior when no files match.  Valid values are
        &quot;fail&quot; and &quot;skip&quot;.  Default is
        &quot;fail&quot;.</td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">mode</td>
      <td valign="top">One of "create", "force-create", "replace",
        "force-replace" or "update" - see below.  Default is
        "create".</td>
      <td valign="top" align="center">No</td>
    </tr>
  </table>

  <h4><a name="mode"><em>mode</em> attribute</a></h4>

  <p>There are three basic modes a task can be in:</p>

  <ul>

    <li><strong>create</strong> - creates an archive that will contain
      all resources that have been specified as nested resources.</li>

    <li><strong>replace</strong> - creates an archive that will
      contain all resources that have been specified as nested
      resources.  If the <em>dest</em> archive exists before running
      the task, any resource of the original archive that doesn't
      match a resource specified as nested resource will be
      preserved.</li>

    <li><strong>update</strong> - creates an archive that will
      contain all resources that have been specified as nested
      resources that are newer than their corresponding entries in the
      <em>dest</em> archive - or that don't exist in the <em>dest</em>
      archive.  If the <em>dest</em> archive exists before running the
      task, any resource of the original archive that doesn't match a
      resource specified as nested resource or is more recent than the
      nested resource will be preserved.</li>

  </ul>

  <p>If the <em>dest</em> archive doesn't exist before running the
    task, all modes behave the same.  If it does
    exist, <strong>create</strong> may remove existing
    entries and <strong>replace</strong> may replace entries that are
    more recent than the specified source resources.</p>

  <p>All three modes will first check whether the <em>dest</em>
    archive is "out of date".  An archive is considered out of date
    if</p>

  <ul>
    <li>it doesn't exist.</li>
    <li>it exists but for at least one source resource there is no
      matching entry in the <em>dest</em> resource.</li>
    <li>the matching entry for at least one source resource is older
      than the source resource.</li>
  </ul>

  <p>Neither of the basic modes will modifiy the <em>dest</em> archive
    if it is not "out of date".  For the <strong>create</strong>
    and <strong>replace</strong> modes there are
    variants <strong>force-create</strong>
    and <strong>force-replace</strong> that will bypass the "out of
    date" check and always replace (entries in) existing archives.</p>

  <h3>Parameters specified as nested elements</h3>

  <h4>dest</h4>

  <p>Accepts
    any <a href="http://ant.apache.org/manual/CoreTypes/resources.html">resource</a>
    or single element resource collection as nested element.</p>

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

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

  <p>This specifies the files and directories that shall be added to
    the archive.</p>

  <h3><a name="ar">Ar</a></h3>

  <p>An <a href="#archive">archiving task</a> creating archives of the
    AR format.</p>

  <p>The AR format is pretty limited, by default it can only store file names up
    to 16 characters and not store directories at all.  It is not
    possible to set the <code>filesonly</code> attribute to true for
    the <code>ar</code> task.</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">format</td>
      <td valign="top">Ar format for entries with names longer than
        16 characters.  Supported values are "ar" which doesn't
        support entries of that length and results in a build failure
        and "bsd".</td>
      <td valign="top" align="center">No, default is "ar"</td>
    </tr>
  </table>

  <h3><a name="cpio">Cpio</a></h3>

  <p>An <a href="#archive">archiving task</a> creating archives of the
    CPIO format.</p>

  <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">format</td>
      <td valign="top">CPIO format for the archive to create.  One of
        "binary", "old-ascii", "new-ascii"<!-- or "crc"-->.  "odc" can be
        used as a synonym for "old-ascii".</td>
      <td valign="top" align="center">No, default is "binary"</td>
    </tr>
    <tr>
      <td valign="top">blocksize</td>
      <td valign="top">Block size for the archive.  Must be a
        positive number.</td>
      <td valign="top" align="center">No, default is 512.</td>
    </tr>
  </table>

  <h3><a name="sevenz">SevenZ</a></h3>

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

  <p>An <a href="#archive">archiving task</a> creating archives of the
    7z format.  As of Commons Compress 1.6 this task only supports
    writing unencrypted archives.</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">contentCompression</td>
      <td valign="top">compression algorithm to use for entry
        contents.</td>
      <td valign="top">As of Commons Compress 1.6 this can be "LZMA2",
        "BZIP2", "DEFLATE" or "COPY" where "COPY" means no compression
        at all.</td>
      <td valign="top" align="center">No, default is LZMA2.</td>
    </tr>
  </table>

  <h3><a name="tar">Tar</a></h3>

  <p>An <a href="#archive">archiving task</a> creating archives of the
    TAR format.</p>

  <p>This task does not support the <code>compression</code> attribute
    of
    the <a href="http://ant.apache.org/manual/CoreTasks/tar.html">core
    task</a>.  You should use a <a href="pack.html">compressing
    task</a> with a <code>tar</code> task as nested element
    instead.</p>

  <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">format</td>
      <td valign="top">Tar format to use.
        See <a href="#tarformat">the section below.  Supported values
        are "ustar", "oldgnu", "gnu", "star" and "pax".</td>
      <td valign="top" align="center">No, default is "ustar"</td>
    </tr>
  </table>

  <h4><a name="tarformat"></a>Tar format</h4>

  <p>Over time the original tar format has seen various extensions and
    revisions.  The Apache Commons Compress library supports the
    original format (called "ustar") and some extensions added later,
    but not all of them.  It supports a subset of features offered by
    the POSIX 1003.1 standard (often referred to as PAX), but this
    support is not complete.</p>

  <p>The Compress Antlib follows Commons Compress' support.  Currently
    the format affects two areas, files bigger than 8 GiB or that need
    other numeric values not fitting into the traditional tar headers
    and entries with names longer than 100 characters.  For Commons
    Compress these areas can be configured separately while the Antlib
    chooses them based on a single format attribute.</p>

  <table border="1" cellpadding="2" cellspacing="0">
    <tr>
      <td valign="top"><b>Format Attribute</b></td>
      <td valign="top"><b>Numeric values too big like files bigger 8GiB</b></td>
      <td valign="top"><b>Entry names longer 100 characters</b></td>
      <td valign="top"><b>Notes</b></td>
    </tr>
    <tr>
      <td valign="top">ustar</td>
      <td valign="top">Not supported, throws an exception.</td>
      <td valign="top">Not supported, throws an exception.</td>
      <td valign="top">Default.</td>
    </tr>
    <tr>
      <td valign="top">oldgnu</td>
      <td valign="top">Not supported, throws an exception.</td>
      <td valign="top">Uses a GNU tar specific extension.</td>
      <td valign="top">Created archives may be unreadable on MacOS X,
        Solaris or with other non-GNU implementations of tar.</td>
    </tr>
    <tr>
      <td valign="top">star</td>
      <td valign="top" rowspan="2">Uses an extension first introduced by J&#xf6;rg
          Schilling's <a href="http://developer.berlios.de/projects/star">star</a>
          and later adopted by GNU tar and BSD tar.</td>
      <td valign="top">Uses a
          PAX <a href="http://pubs.opengroup.org/onlinepubs/009695399/utilities/pax.html#tag_04_100_13_03">extended
          header</a> as defined by POSIX 1003.1.</td>
      <td valign="top">Created archives will be readable by star and
        modern versions of GNU tar and BSD tar.</td>
    </tr>
    <tr>
      <td valign="top">gnu</td>
      <td valign="top">Uses a GNU tar specific extension.</td>
      <td valign="top">Created archives may be unreadable on MacOS X,
        Solaris or with other non-GNU implementations of tar.  The
        archives are similar to what GNU tar would create by
        default.</td>
    </tr>
    <tr>
      <td valign="top">pax</td>
      <td valign="top" colspan="2">Uses use a PAX extended header as
          defined by POSIX 1003.1.</td>
      <td valign="top">Created archives will be readable by all modern
        implementations of tar.</td>
    </tr>
  </table>

  <h4>Examples</h4>

<pre>
&lt;cmp:tar destfile=&quot;${dist}/manual.tar&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;fileset dir="htdocs/manual"/&gt;
&lt;cmp:tar/&gt;
&lt;cmp:gzip destfile=&quot;${dist}/manual.tar.gz&quot;
    src=&quot;${dist}/manual.tar&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"/&gt;</pre>

  <p>tars all files in the <code>htdocs/manual</code> directory into a
    file called <code>manual.tar</code> in the <code>${dist}</code>
    directory, then applies the gzip task to compress it.</p>

<pre>
&lt;cmp:tar destfile=&quot;${dist}/manual.tar&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;
     excludes=&quot;mydocs/**, **/todo.html&quot;
  /&gt;
&lt;cmp:tar/&gt;</pre>

  <p>tars all files in the <code>htdocs/manual</code> directory into a
    file called <code>manual.tar</code> in the <code>${dist}</code>
    directory. Files in the directory <code>mydocs</code>, or files
    with the name <code>todo.html</code> are excluded.</p>

<pre>
&lt;cmp:tar destfile=&quot;${basedir}/docs.tar&quot;
    preserveLeadingSlashes=&quot;true&quot;&gt;
    xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;cmp:tarfileset dir=&quot;${dir.src}/docs&quot;
              fullpath=&quot;/usr/doc/ant/README&quot;&gt;
    &lt;include name=&quot;readme.txt&quot;/&gt;
  &lt;/cmp:tarfileset&gt;
  &lt;cmp:tarfileset dir=&quot;${dir.src}/docs&quot;
              prefix=&quot;/usr/doc/ant&quot;&gt;
    &lt;include name=&quot;*.html&quot;/&gt;
  &lt;/cmp:tarfileset&gt;
&lt;/cmp:tar&gt;</pre>

  <p>Writes the file <code>docs/readme.txt</code> as
    <code>/usr/doc/ant/README</code> into the archive. All
    <code>*.html</code> files in the <code>docs</code> directory are
    prefixed by <code>/usr/doc/ant</code>, so for example
    <code>docs/index.html</code> is written as
    <code>/usr/doc/ant/index.html</code> to the archive.</p>

<pre>
&lt;cmp:tar format=&quot;oldgnu&quot;
     destfile=&quot;${dist.base}/${dist.name}-src.tar&quot;&gt;
  &lt;tarfileset dir=&quot;${dist.name}/..&quot; filemode=&quot;755&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
    &lt;include name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
    &lt;include name=&quot;${dist.name}/build.sh&quot;/&gt;
  &lt;/tarfileset&gt;
  &lt;tarfileset dir=&quot;${dist.name}/..&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
    &lt;include name=&quot;${dist.name}/**&quot;/&gt;
    &lt;exclude name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
    &lt;exclude name=&quot;${dist.name}/build.sh&quot;/&gt;
  &lt;/tarfileset&gt;
&lt;/cmp:tar&gt;
</pre>
<p>This example shows building a tar which uses the GNU extensions for long paths and
where some files need to be marked as executable (mode 755)
and the rest are use the default mode (read-write by owner). The first
fileset selects just the executable files. The second fileset must exclude
the executable files and include all others. </p>

<pre>
&lt;cmp:gzip destfile="release.tar.gz" xmlns:cmp="antlib:org.apache.ant.compress"&gt;
  &lt;cmp:tar&gt;
    &lt;cmp:zipfileset src="release.zip"/&gt;
  &lt;/cmp:tar&gt;
&lt;/cmp:gzip&gt;
</pre>

  <p>Re-packages a ZIP archive as a GZip compressed tar archive.  If
    Unix file permissions have been stored as part of the ZIP file,
    they will be retained in the resulting tar archive.</p>

  <h3><a name="zip">Zip</a></h3>

  <p>An <a href="#archive">archiving task</a> creating archives of the
    ZIP format.</p>

  <p>The discussion about encodings in
    the <a href="http://ant.apache.org/manual/CoreTasks/zip.html#encoding">core
      zip task manual</a> applies to this task as well.</p>
  
  <p><b>Note</b> the following attributes have default values
    different from the core zip
    task: <code>filesonly</code>, <code>whenempty</code>
    and <code>duplicate</code>.  The core task's <code>compress</code>
    attribute isn't available for this task, use
    the <code>level</code> attribute instead where a level of 0
    corresponds to no compression and not specifying a level at all to
    default compression.</p>

  <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">level</td>
      <td valign="top">Non-default level at which file compression should be
        performed. Valid values range from 0 (no compression/fastest) to 9
        (maximum compression/slowest).</td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">comment</td>
      <td valign="top">Comment to store in the archive.</td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">keepcompression</td>
      <td valign="top">For entries coming from existing archives (like
        nested <em>zipfileset</em>s or while updating the archive), keep
        the compression as it has been originally instead of using the
        <em>level</em> attribute.  Defaults false.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">useLanguageEncodingFlag</td>
      <td valign="top">Whether to set the language encoding flag if the
        encoding is UTF-8.  This setting doesn't have any effect if the
        encoding is not UTF-8.
        <br/>See also
        the <a href="http://ant.apache.org/manual/CoreTasks/zip.html#encoding">discussion</a>
        in the core task's manual.
        Default is true.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">createUnicodeExtraFields</td>
      <td valign="top">Whether to create unicode extra fields to store
        the file names a second time inside the entry's metadata.
        <br>Possible values are "never", "always" and "not-encodable"
        which will only add Unicode extra fields if the file name cannot
        be encoded using the specified encoding.
        <br/>See also
        the <a href="http://ant.apache.org/manual/CoreTasks/zip.html#encoding">discussion</a>
        in the core task's manual.
        Default is "never".</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">fallbacktoUTF8</td>
      <td valign="top">Whether to use UTF-8 and the language encoding
        flag instead of the specified encoding if a file name cannot be
        encoded using the specified encoding.
        <br/>See also
        the <a href="http://ant.apache.org/manual/CoreTasks/zip.html#encoding">discussion</a>
        in the core task's manual.
        Default is false.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">zip64Mode</td>
      <td valign="top">Controls whether Zip64 extended information is
        written to the archive.<br/>
        In order to store entries bigger than 4GB or more than 65536
        entries inside an archive, so called Zip64 extensions must be
        used.  An archive that uses such extensions may not be
        readable by all unarchivers.<br/>
        The possible modes are "always", "never" and "as-needed".  The
        default is "as-needed" which enables Zip64 extensions if a
        resource is added to the archive whose size is known to exceed
        4GB or if there are more than 65536 entries.  "as-needed" does
        not work for resources of unknown size (like URL-resources),
        if you try to archive such resources, the default will be
        "never" instead of "as-needed".<br/>
        If the mode is "never" and the resource actually exceeds the
        limit, the build will fail.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
  </table>

<h3>Examples</h3>
<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip
    xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
&lt;cmp:zip/&gt;
</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory into a
    file called <code>manual.zip</code> in the <code>${dist}</code>
    directory.</p>

<!--pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot;
    mode="update"
    xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
&lt;/cmp:zip&gt;</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory into a
    file called <code>manual.zip</code> in the <code>${dist}</code>
    directory. If <code>manual.zip</code> doesn't exist, it is
    created; otherwise it is updated with the new/changed files.</p-->

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;
       excludes=&quot;mydocs/**, **/todo.html&quot;
    /&gt;
&lt;/cmp:zip&gt;
</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory. Files
    in the directory <code>mydocs</code>, or files with the
    name <code>todo.html</code> are excluded.</p>

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot;
    xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;
       includes=&quot;api/**/*.html&quot;
       excludes=&quot;**/todo.html&quot;
    /&gt;
&lt;/cmp:zip&gt;
</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory. Only
    html files under the directory <code>api</code> are zipped, and
    files with the name <code>todo.html</code> are excluded.</p>

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot; xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
  &lt;fileset dir=&quot;.&quot; includes=&quot;ChangeLog.txt&quot;/&gt;
&lt;/cmp:zip&gt;</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory, and
    also adds the file <code>ChangeLog.txt</code> in the current
    directory. <code>ChangeLog.txt</code> will be added to the top of
    the ZIP file, just as if it had been located
    at <code>htdocs/manual/ChangeLog.txt</code>.</p>

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot; xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;cmp:zipfileset dir=&quot;htdocs/manual&quot; prefix=&quot;docs/user-guide&quot;/&gt;
  &lt;cmp:zipfileset dir=&quot;.&quot; includes=&quot;ChangeLog27.txt&quot; fullpath=&quot;docs/ChangeLog.txt&quot;/&gt;
  &lt;cmp:zipfileset src=&quot;examples.zip&quot; includes=&quot;**/*.html&quot; prefix=&quot;docs/examples&quot;/&gt;
&lt;/cmp:zip&gt;</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory into
    the <code>docs/user-guide</code> directory in the archive, adds
    the file <code>ChangeLog27.txt</code> in the current directory
    as <code>docs/ChangeLog.txt</code>, and includes all the html
    files in <code>examples.zip</code>
    under <code>docs/examples</code>.  The archive might end up
    containing the files:</p>
<pre>    docs/user-guide/html/index.html
    docs/ChangeLog.txt
    docs/examples/index.html
</pre>

  <p>The code</p>

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot; xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;cmp:zipfileset dir=&quot;htdocs/manual&quot; prefix=&quot;docs/user-guide&quot;/&gt;
  &lt;cmp:archives&gt;
    &lt;zips&gt;
      &lt;fileset dir=&quot;.&quot; includes=&quot;examples*.zip&quot;/&gt;
    &lt;/zips&gt;
  &lt;/cmp:archives&gt;
&lt;/cmp:zip&gt;
</pre>

  <p>zips all files in the <code>htdocs/manual</code> directory into
    the <code>docs/user-guide</code> directory in the archive and
    includes all the files in any file that
    maches <code>examples*.zip</code>, such as all files
    within <code>examples1.zip</code>
    or <code>examples_for_brian.zip</code>.  The same can be achieved
    with</p>

<pre>
&lt;cmp:zip destfile=&quot;${dist}/manual.zip&quot; xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;mappedresources&gt;
    &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
    &lt;globmapper from="*" to="docs/user-guide/*"/&gt;
  &lt;/mappedresources&gt;
  &lt;archives&gt;
    &lt;zips&gt;
      &lt;fileset dir=&quot;.&quot; includes=&quot;examples*.zip&quot;/&gt;
    &lt;/zips&gt;
  &lt;/archives&gt;
&lt;/cmp:zip&gt;
</pre>

  <p>The next example</p>

<pre>
&lt;cmp:zip dest="release.zip" xmlns:cmp="antlib:org.apache.ant.compress"&quot;&gt;
  &lt;cmp:tarfileset src="release.tar"/&gt;
&lt;/cmp:zip&gt;
</pre>

  <p>re-packages a TAR archive as a ZIP archive.  If Unix file
    permissions have been stored as part of the TAR file, they will be
    retained in the resulting ZIP archive.</p>

</body>
</html>
