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