<!--
   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>Archive Entries</title>
</head>

<body>

<h2><a name="archiveentry">Archive Entries</h2>

<p>For each of the supported archiving formats there is a
  correspondig <code>entry</code> resource that represents a single
  entry in such an archive.</p>

<p>All of these resources need to know the archive the entry should be
  read from, it can be specifed as either the archive attribute or a
  nested single-element resource collection.</p>

<p>The <code>entry</code> types share the following set of 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">archive</td>
    <td valign="top">The archive containing this resource</td>
    <td align="center" valign="top">Yes, unless a nested resource
    collection has been specified.</td>
  </tr>
  <tr>
    <td valign="top">name</td>
    <td valign="top">The name of the archived resource</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">The encoding of filenames inside the archive</td>
    <td align="center" valign="top">No;
      platform default used if unspecified.  Currently ignored by all
      but <code>zipentry</code></td>
  </tr>
</table>

<h2><a name="arentry">arentry</a></h2>

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a AR archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:arentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.ar"/&gt;
&lt;/cmp:arentry&gt;
</pre>

<h2><a name="arjentry">arjentry</a></h2>

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

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a ARJ archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:arjentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.arj"/&gt;
&lt;/cmp:arjentry&gt;
</pre>

<p>Represents the entry named some-file.txt in archive some-archive.arj.</p>

<h2><a name="cpioentry">cpioentry</a></h2>

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a CPIO archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:cpioentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.cpio"/&gt;
&lt;/cmp:cpioentry&gt;
</pre>

<p>Represents the entry named some-file.txt in archive some-archive.cpio.</p>

<h2><a name="dumpentry">dumpentry</a></h2>

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

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a Unix dump archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:dumpentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="/some-file.txt"&gt;
  &lt;file file="some-archive.dump"/&gt;
&lt;/cmp:dumpentry&gt;
</pre>

<p>Represents the entry named /some-file.txt in archive some-archive.dump.</p>

<h2><a name="sevenzentry">sevenzentry</a></h2>

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

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a 7z archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:sevenzentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.7z"/&gt;
&lt;/cmp:sevenzentry&gt;
</pre>

<p>Represents the entry named some-file.txt in archive some-archive.7z.</p>

<h2><a name="tarentry">tarentry</a></h2>

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a TAR archive.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:tarentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.tar"/&gt;
&lt;/cmp:tarentry&gt;
</pre>

<p>Represents the entry named some-file.txt in archive some-archive.tar.</p>

<h2><a name="zipentry">zipentry</a></h2>

<p>An <a href="#archiveentry">archive entry</a> representing an entry
  in a ZIP archive.</p>

<p>Unlike
  its <a href="https://ant.apache.org/manual/CoreTypes/resources.html#zipentry">counterpart
  in Ant's core</a> this Antlib's <code>zipentry</code> can work on
  archives that are not file system resources.</p>

<h4>Examples</h4>

<pre>
&lt;cmp:zipentry xmlns:cmp="antlib:org.apache.ant.compress"
    name="some-file.txt"&gt;
  &lt;file file="some-archive.zip"/&gt;
&lt;/cmp:zipentry&gt;
</pre>

<p>Represents the entry named some-file.txt in archive some-archive.zip.</p>

