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

<body>

<h2>archives</a></h2>

<p>This resource collection accepts an arbitrary number of nested
  resources and assumes that all those resources must be archives of one
  of the supported formats.  The resources returned
  by <code>&lt;archives&gt;</code> are the contents of the nested
  archives.</p>

<p><em>archives</em> doesn't support any attributes.</p>

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

  <p><code>&lt;archives&gt;</code> has seven nested
    elements <code>&lt;ars&gt;</code>, <code>&lt;arjs&gt;</code>, <code>&lt;cpios&gt;</code>,
    <code>&lt;dumps&gt;</code>, <code>&lt;sevenzs&gt;</code>, <code>&lt;zips&gt;</code>
    and
    <code>&lt;tars&gt;</code> that
    are <a href="https://ant.apache.org/manual/CoreTypes/resources.html#union">unions</a>
    themselves, i.e. they accept arbitrary many resource(collection)s
    as nested elements.</p>

  <p>The nested resources of &lt;zips&gt; are treated as ZIP archives,
    the nested resources of &lt;tars&gt; as TAR archives and so on.</p>

  <p>Support for nested <code>arjs</code>, <code>dumps</code>
    and <code>sevenzs</code> has been added with the Compress Antlib
    1.5.</p>

  <h4>Examples</h4>

  <p>Copies all files from all jars that are on the classpath
    to <code>${target}</code>.</p>

  <pre>
    &lt;copy todir="${target}"&gt;
      &lt;cmp:archives xmlns:cmp="antlib:org.apache.ant.compress"&gt;
        &lt;zips&gt;
          &lt;restrict&gt;
            &lt;path path="${java.class.path}"/&gt;
            &lt;name name="*.jar"/&gt;
          &lt;/restrict&gt;
        &lt;/zips&gt;
      &lt;/cmp:archives&gt;
    &lt;/copy&gt;
</pre>

</body>
</html>
