<!--
   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.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Language" content="en-us">
  <link rel="stylesheet" type="text/css" href="style.css">
<title>Archive FileSets</title>
</head>
<body>

<h2><a name="archivefileset">Archive FileSets</h2>

<p>For each of the supported archiving formats there is a
  correspondig <code>fileset</code> resource collection.</p>

<p>Such a <code>fileset</code> is a special form of
 a <code>&lt;<a href="https://ant.apache.org/manual/CoreTypes/fileset.html">fileset</a>&gt;</code>
  which can behave in 2 different ways : <br>
</p>

<ul>
  <li>When the <span style="font-style: italic;">src</span> attribute
  is used - or a nested resource collection has been specified, the
  fileset is populated with archive entries found in the file <span
  style="font-style: italic;">src</span>.<br>
  </li>
  <li>When the <span style="font-style: italic;">dir</span> attribute
is used, the fileset is populated with filesystem files found under <span
 style="font-style: italic;">dir</span>.<br>
  </li>
</ul>

<p>Each archive fileset supports all attributes of <code>&lt;<a
 href="https://ant.apache.org/manual/CoreTypes/fileset.html">fileset</a>&gt;</code>
in addition to those listed below.<br>
</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">prefix</td>
      <td valign="top">all files in the fileset are prefixed with that 
path in the archive.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">fullpath</td>
      <td valign="top">the file described by the fileset is placed at  
that exact location in the archive.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">src</td>
      <td valign="top">may be used in place of the <i>dir</i>
        attribute to specify a file whose contents will be extracted and
        included in the archive.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">filemode</td>
      <td valign="top">A 3 digit octal string, specify the user, group 
and other modes in the standard Unix fashion.  Only applies to    
plain files.  Default is 644.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">dirmode</td>
      <td valign="top">A 3 digit octal string, specify the user, group 
and other modes in the standard Unix fashion.  Only applies to    
directories.  Default is 755.</td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">erroronmissingarchive</td>
      <td valign="top">
        Specify what happens if the archive does not exist.
        If true, a build error will happen; if false, the fileset
        will be ignored/empty.
        Defaults to true.
      </td>
      <td valign="top" align="center">No</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 read from 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>
  </tbody>
</table>

<p>The <i>fullpath</i> attribute can only be set for filesets that
represent a single file. The <i>prefix</i> and <i>fullpath</i>
attributes cannot both be set on the same fileset.</p>

<p>When using the <i>src</i> attribute, include and exclude patterns
may be used to specify a subset of the archive for inclusion in the
archive as with the <i>dir</i> attribute.</p>

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

<h2><a name="arfileset">ArFileSet</a></h2>

<p>A <code>&lt;arfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> with attributes to
  specify user and group ids in addition to the parameters
  specified above.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">uid</td>
      <td valign="top">The user identifier (UID) for the ar entry. This is an integer value
        and is not the same as the username.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">gid</td>
      <td valign="top">The group identifier (GID) for the ar entry.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
  </tbody>
</table>

<h4>Examples</h4>
<blockquote>
<pre>
  &lt;copy todir="some-dir"&gt;
    &lt;cmp:arfileset xmlns:cmp="antlib:org.apache.ant.compress"&gt;
      &lt;file file="some-archive.ar"/&gt;
    &lt;/cmp:arfileset&gt;
  &lt;/copy&gt;
</pre></blockquote>

<p>extracts some-archive.ar, uncompresses and extracts it on the fly
  and copies the contents of it into some-dir.  File timestamps will
  be compared between the archive's entries and files inside the
  target directory, no files get overwritten unless they are
  out-of-date.</p>

<h2><a name="arjfileset">ArjFileSet</a></h2>

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

<p>A <code>&lt;arjfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a>.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><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="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">https://docs.oracle.com/javase/8/docs/technotes/guides/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>
  </tbody>
</table>

<h4>Examples</h4>
<blockquote>
<pre>
  &lt;copy todir="some-dir"&gt;
    &lt;cmp:arjfileset xmlns:cmp="antlib:org.apache.ant.compress"&gt;
      &lt;file file="some-archive.arj"/&gt;
    &lt;/cmp:arjfileset&gt;
  &lt;/copy&gt;
</pre></blockquote>

<p>extracts some-archive.arj
  and copies the contents of it into some-dir.  File timestamps will
  be compared between the archive's entries and files inside the
  target directory, no files get overwritten unless they are
  out-of-date.</p>

<h2><a name="cpiofileset">CpioFileSet</a></h2>

<p>A <code>&lt;cpiofileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> with attributes to
  specify user and group ids in addition to the parameters
  specified above.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">uid</td>
      <td valign="top">The user identifier (UID) for the cpio entry. This is an integer value
        and is not the same as the username.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">gid</td>
      <td valign="top">The group identifier (GID) for the cpio entry.
      </td>
      <td align="center" valign="top">No</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="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">https://docs.oracle.com/javase/8/docs/technotes/guides/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>
  </tbody>
</table>

<h4>Examples</h4>
<blockquote>
<pre>
  &lt;copy todir="some-dir"&gt;
    &lt;cmp:cpiofileset xmlns:cmp="antlib:org.apache.ant.compress"&gt;
      &lt;file file="some-archive.cpio"/&gt;
    &lt;/cmp:cpiofileset&gt;
  &lt;/copy&gt;
</pre></blockquote>

<p>extracts some-archive.cpio, uncompresses and extracts it on the fly
  and copies the contents of it into some-dir.  File timestamps will
  be compared between the archive's entries and files inside the
  target directory, no files get overwritten unless they are
  out-of-date.</p>

<h2><a name="dumpfileset">DumpFileSet</a></h2>

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

<p>A <code>&lt;dumpfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> with attributes to
  specify user and group ids in addition to the parameters
  specified above.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">uid</td>
      <td valign="top">The user identifier (UID) for the dump entry. This is an integer value
        and is not the same as the username.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">gid</td>
      <td valign="top">The group identifier (GID) for the dump entry.
      </td>
      <td align="center" valign="top">No</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="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">https://docs.oracle.com/javase/8/docs/technotes/guides/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>
  </tbody>
</table>

<h4>Examples</h4>
<blockquote>
<pre>
  &lt;copy todir="some-dir"&gt;
    &lt;cmp:dumpfileset xmlns:cmp="antlib:org.apache.ant.compress"&gt;
      &lt;file file="some-archive.dump"/&gt;
    &lt;/cmp:dumpfileset&gt;
  &lt;/copy&gt;
</pre></blockquote>

<p>extracts some-archive.dump, uncompresses and extracts it on the fly
  and copies the contents of it into some-dir.  File timestamps will
  be compared between the archive's entries and files inside the
  target directory, no files get overwritten unless they are
  out-of-date.</p>

<h2><a name="sevenzfileset">SevenZFileSet</a></h2>

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

<p>A <code>&lt;sevenzfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> for 7z archives.</p>

<h2><a name="tarfileset">TarFileSet</a></h2>

<p>A <code>&lt;tarfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> with attributes to
  specify user and group ownership in addition to the parameters
  specified above.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">username</td>
      <td valign="top">The username for the tar entry. This is not the same as the UID.
       </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">group</td>
      <td valign="top">The groupname for the tar entry. This is not the same as the GID.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">uid</td>
      <td valign="top">The user identifier (UID) for the tar entry. This is an integer value
        and is not the same as the username.
      </td>
      <td align="center" valign="top">No</td>
    </tr>
    <tr>
      <td valign="top">gid</td>
      <td valign="top">The group identifier (GID) for the tar entry.
      </td>
      <td align="center" valign="top">No</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="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">https://docs.oracle.com/javase/8/docs/technotes/guides/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>
  </tbody>
</table>

<h4>Examples</h4>
<blockquote>
<pre>
  &lt;copy todir="some-dir"&gt;
    &lt;cmp:tarfileset xmlns:cmp="antlib:org.apache.ant.compress"
        includes="lib/**"&gt;
      &lt;cmp:bzip2resource&gt;
        &lt;url url="https://example.org/dist/some-archive.tar.bz2"/&gt;
      &lt;/cmp:bzip2resource&gt;
    &lt;/cmp:tarfileset&gt;
  &lt;/copy&gt;
</pre></blockquote>

<p>downloads the archive some-archive.tar.bz2, uncompresses and
extracts it on the fly, copies the contents of the lib directory into
some-dir and discards the rest of the archive.  File timestamps will
be compared between the archive's entries and files inside the target
directory, no files get overwritten unless they are out-of-date.</p>


<h2><a name="zipfileset">ZipFileSet</a></h2>

<p>A <code>&lt;zipfileset&gt;</code> is
  an <a href="#archivefileset">archive fileset</a> with an attribute
  to specify the encoding of filenames inside the archive in addition
  to the parameters specified above.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tbody>
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td valign="top" align="center"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">encoding</td>
      <td valign="top">The character encoding to use for filenames
      inside the zip file.  For a list of possible values see <a
      href="https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html">https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html</a>.
        Defaults to the platform's default character encoding.</td>
      <td align="center" valign="top">No</td>
    </tr>
  </tbody>
</table>

<h4>Examples</h4>
<pre>
  &lt;cmp:zip destfile="${dist}/manual.zip" xmlns:cmp="antlib:org.apache.ant.compress"&gt;
    &lt;cmp:zipfileset dir="htdocs/manual" prefix="docs/user-guide"/&gt;
    &lt;cmp:zipfileset dir="." includes="ChangeLog27.txt" fullpath="docs/ChangeLog.txt"/&gt;
    &lt;cmp:zipfileset src="examples.zip" includes="**/*.html" prefix="docs/examples"/&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>
<blockquote>
  <code>docs/user-guide/html/index.html<br>
docs/ChangeLog.txt<br>
docs/examples/index.html<br>
  </code>
</blockquote>

</body>
</html>
