<!--
   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="../stylesheets/style.css">
<title>Copy Task</title>
</head>

<body>

<h2><a name="copy">Copy</a></h2>
<h3>Description</h3>
<p>Copies a file or resource collection to a new file or directory.  By default, files are
only copied if the source file is newer than the destination file,
or when the destination file does not exist.  However, you can explicitly
overwrite files with the <code>overwrite</code> attribute.</p>

<p><a href="../Types/resources.html#collection">Resource
Collection</a>s are used to select a group of files to copy.  To use a
resource collection, the <code>todir</code> attribute must be set.
<strong>Note</strong> that some resources (for example
the <a href="../Types/resources.html#file">file</a> resource)
return absolute paths as names and the result of using them without
using a nested mapper (or the flatten attribute) may not be what you
expect.</p>

<p>
<strong>Note: </strong>If you employ filters in your copy operation,
you should limit the copy to text files. Binary files will be corrupted
by the copy operation.
This applies whether the filters are implicitly defined by the
<a href="filter.html">filter</a> task or explicitly provided to the copy
operation as <a href="../Types/filterset.html">filtersets</a>.
  <em>See <a href="#encoding">encoding note</a></em>.
</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">file</td>
    <td valign="top">The file to copy.</td>
    <td valign="top" align="center">Yes, unless a nested
    resource collection element is used.</td>
  </tr>
  <tr>
    <td valign="top">preservelastmodified</td>
    <td valign="top">Give the copied files the same last modified
      time as the original source files.</td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">tofile</td>
    <td valign="top">The file to copy to.</td>
    <td valign="top" align="center" rowspan="2">With the <code>file</code>
      attribute, either <code>tofile</code> or <code>todir</code> can be used.<br/>

      With nested resource collection elements, if the number of
      included resources
      is greater than 1, or if only the <code>dir</code> attribute is
      specified in the <code>&lt;fileset&gt;</code>, or if the
      <code>file</code> attribute is also specified, then only
      <code>todir</code> is allowed.<br/>
      <em>Prior to Apache Ant 1.8.2</em> the <code>tofile</code> attribute
      only supported filesystem resources top copy from.</td>
  </tr>
  <tr>
    <td valign="top">todir</td>
    <td valign="top">The directory to copy to.</td>
  </tr>
  <tr>
    <td valign="top">overwrite</td>
    <td valign="top">Overwrite existing files even if the destination
      files are newer.</td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">force</td>
    <td valign="top">Overwrite read-only destination
      files.  <em>since Ant 1.8.2</em></td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">filtering</td>
    <td valign="top">Indicates whether token filtering using the <a href="../using.html#filters">global
        build-file filters</a> should take place during the copy.
      <em>Note</em>: Nested <code>&lt;filterset&gt;</code> elements will
      always be used, even if this attribute is not specified, or its value is
      <code>false</code> (<code>no</code>, or <code>off</code>).</td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">flatten</td>
    <td valign="top">Ignore the directory structure of the source files,
      and copy all files into the directory specified by the <code>todir</code>
      attribute.  Note that you can achieve the same effect by using a
      <a href="../Types/mapper.html#flatten-mapper">flatten mapper</a>.</td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">includeEmptyDirs</td>
     <td valign="top">Copy any empty directories included in the FileSet(s).
     </td>
     <td valign="top" align="center">No; defaults to true.</td>
  </tr>
  <tr>
    <td valign="top">failonerror</td>
     <td valign="top">If false, log a warning message, but do not stop the
       build, when the file to copy does not exist or one of the nested
       filesets points to a directory that doesn't exist or an error occurs
       while copying.
     </td>
     <td valign="top" align="center">No; defaults to true.</td>
  </tr>
  <tr>
    <td valign="top">quiet</td>
      <td valign="top">If true and failonerror is false, then do not log a
       warning message when the file to copy does not exist or one of the nested
       filesets points to a directory that doesn't exist or an error occurs
       while copying. <em>since Ant 1.8.3</em>.
     </td>
     <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">verbose</td>
     <td valign="top">Log the files that are being copied.</td>
     <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">encoding</td>
    <td valign="top">The encoding to assume when filter-copying the
    files. <em>since Ant 1.5</em>.</td>
    <td align="center">No - defaults to default JVM encoding</td>
  </tr>
  <tr>
    <td valign="top">outputencoding</td>
    <td valign="top">The encoding to use when writing the files.
    <em>since Ant 1.6</em>.</td>
    <td align="center">No - defaults to the value of the encoding
    attribute if given or the default JVM encoding otherwise.</td>
  </tr>
  <tr>
    <td valign="top">enablemultiplemappings</td>
    <td valign="top">
      If true the task will process to all the mappings for a
      given source path. If false the task will only process
      the first file or directory. This attribute is only relevant
      if there is a mapper subelement.
      <em>since Ant 1.6</em>.</td>
    <td align="center">No - defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">granularity</td>
    <td valign="top">The number of milliseconds leeway to give before
    deciding a file is out of date. This is needed because not every
    file system supports tracking the last modified time to the
    millisecond level. Default is 1 second, or 2 seconds on DOS
    systems.  This can also be useful if source and target files live
    on separate machines with clocks being out of sync.  <em>since Ant
    1.6.2</em>.</td>
    <td align="center">No</td>
  </tr>
</table>
<h3>Parameters specified as nested elements</h3>

<h4>fileset or any other resource collection</h4>
<p><a href="../Types/resources.html#collection">Resource
Collection</a>s are used to select groups of files to copy.  To use a
resource collection, the <code>todir</code> attribute must be set.</p>
<p>Prior to Ant 1.7 only <code>&lt;fileset&gt;</code> has been
supported as a nested element.</p>

<h4>mapper</h4>
 <p>You can define filename transformations by using a nested <a
 href="../Types/mapper.html">mapper</a> element. The default mapper used by
 <code>&lt;copy&gt;</code> is the <a
 href="../Types/mapper.html#identity-mapper">identity mapper</a>.</p>
  <p>
    <em>Since Ant 1.6.3</em>,
    one can use a filenamemapper type in place of the mapper element.
  </p>

<p>Note that the source name handed to the mapper depends on the
resource collection you use.  If you use <code>&lt;fileset&gt;</code>
or any other collection that provides a base directory, the name
passed to the mapper will be a relative filename, relative to the base
directory.  In any other case the absolute filename of the source will
be used.</p>

<h4>filterset</h4>
 <p><a href="../Types/filterset.html">FilterSet</a>s are used to replace
tokens in files that are copied.
 To use a FilterSet, use the nested <code>&lt;filterset&gt;</code> element.</p>

<p>It is possible to use more than one filterset.</p>

<h4>filterchain</h4>
<p>The Copy task supports nested <a href="../Types/filterchain.html">
FilterChain</a>s.</p>

<p>
If <code>&lt;filterset&gt;</code> and <code>&lt;filterchain&gt;</code> elements are used inside the
same <code>&lt;copy&gt;</code> task, all <code>&lt;filterchain&gt;</code> elements are processed first
followed by <code>&lt;filterset&gt;</code> elements.
</p>

<h3>Examples</h3>
<p><b>Copy a single file</b></p>
<pre>
  &lt;copy file=&quot;myfile.txt&quot; tofile=&quot;mycopy.txt&quot;/&gt;
</pre>
<p><b>Copy a single file to a directory</b></p>
<pre>
  &lt;copy file=&quot;myfile.txt&quot; todir=&quot;../some/other/dir&quot;/&gt;
</pre>
<p><b>Copy a directory to another directory</b></p>
<pre>
  &lt;copy todir=&quot;../new/dir&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;/&gt;
  &lt;/copy&gt;
</pre>
<p><b>Copy a set of files to a directory</b></p>
<pre>
  &lt;copy todir=&quot;../dest/dir&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;&gt;
      &lt;exclude name=&quot;**/*.java&quot;/&gt;
    &lt;/fileset&gt;
  &lt;/copy&gt;

  &lt;copy todir=&quot;../dest/dir&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot; excludes=&quot;**/*.java&quot;/&gt;
  &lt;/copy&gt;
</pre>
<p><b>Copy a set of files to a directory, appending
<code>.bak</code> to the file name on the fly</b></p>
<pre>
  &lt;copy todir=&quot;../backup/dir&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;/&gt;
    &lt;globmapper from=&quot;*&quot; to=&quot;*.bak&quot;/&gt;
  &lt;/copy&gt;
</pre>

<p><b>Copy a set of files to a directory, replacing @TITLE@ with Foo Bar
in all files.</b></p>
<pre>
  &lt;copy todir=&quot;../backup/dir&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;/&gt;
    &lt;filterset&gt;
      &lt;filter token=&quot;TITLE&quot; value=&quot;Foo Bar&quot;/&gt;
    &lt;/filterset&gt;
  &lt;/copy&gt;
</pre>

<p><b>Collect all items from the current CLASSPATH setting into a
destination directory, flattening the directory structure.</b></p>
<pre>
  &lt;copy todir=&quot;dest&quot; flatten=&quot;true&quot;&gt;
    &lt;path&gt;
      &lt;pathelement path=&quot;${java.class.path}&quot;/&gt;
    &lt;/path&gt;
  &lt;/copy&gt;
</pre>

<p><b>Copies some resources to a given directory.</b></p>
<pre>
  &lt;copy todir=&quot;dest&quot; flatten=&quot;true&quot;&gt;
    &lt;resources&gt;
      &lt;file file=&quot;src_dir/file1.txt&quot;/&gt;
      &lt;url url=&quot;http://ant.apache.org/index.html&quot;/&gt;
    &lt;/resources&gt;
  &lt;/copy&gt;
</pre>

<p>If the example above didn't use the flatten attribute,
  the <code>&lt;file&gt;</code> resource would have returned its full
  path as source and target name and would not have been copied at
  all.  In general it is a good practice to use an explicit mapper
  together with resources that use an absolute path as their
  names.</p>

<p><b>Copies the two newest resources into a destination directory.</b></p>
<pre>
  &lt;copy todir=&quot;dest&quot; flatten=&quot;true&quot;&gt;
    &lt;first count=&quot;2&quot;&gt;
      &lt;sort&gt;
        &lt;date xmlns=&quot;antlib:org.apache.tools.ant.types.resources.comparators&quot;/&gt;
        &lt;resources&gt;
          &lt;file file=&quot;src_dir/file1.txt&quot;/&gt;
          &lt;file file=&quot;src_dir/file2.txt&quot;/&gt;
          &lt;file file=&quot;src_dir/file3.txt&quot;/&gt;
          &lt;url url=&quot;http://ant.apache.org/index.html&quot;/&gt;
        &lt;/resources&gt;
      &lt;/sort&gt;
    &lt;/first&gt;
  &lt;/copy&gt;
</pre>

<p>The paragraph following the previous example applies to this
  example as well.</p>

<p><strong>Unix Note:</strong> File permissions are not retained when files
are copied; they end up with the default <code>UMASK</code> permissions
instead. This
is caused by the lack of any means to query or set file permissions in the
current Java runtimes. If you need a permission-preserving copy function,
use <code>&lt;exec executable="cp" ... &gt;</code> instead.
</p>

<p><strong>Windows Note:</strong> If you copy a file to a directory
where that file already exists, but with different casing,
the copied file takes on the case of the original. The workaround is to
<a href="delete.html">delete</a>
the file in the destination directory before you copy it.
</p>
  <p>
    <strong><a name="encoding">Important Encoding Note:</a></strong>
    The reason that binary files when filtered get corrupted is that
    filtering involves reading in the file using a Reader class. This
    has an encoding specifying how files are encoded. There are a number
    of different types of encoding - UTF-8, UTF-16, Cp1252, ISO-8859-1,
    US-ASCII and (lots) others. On Windows the default character encoding
    is Cp1252, on Unix it is usually UTF-8. For both of these encoding
    there are illegal byte sequences (more in UTF-8 than for Cp1252).
  </p>
  <p>
    How the Reader class deals with these illegal sequences is up to the
    implementation
    of the character decoder. The current Sun Java implementation is to
    map them to legal characters. Previous Sun Java (1.3 and lower) threw
    a MalformedInputException. IBM Java 1.4 also throws this exception.
    It is the mapping of the characters that cause the corruption.
  </p>
  <p>
    On Unix, where the default is normally UTF-8, this is a <em>big</em>
    problem, as it is easy to edit a file to contain non US Ascii characters
    from ISO-8859-1, for example the Danish oe character. When this is
    copied (with filtering) by Ant, the character get converted to a
    question mark (or some such thing).
  </p>
  <p>
    There is not much that Ant can do. It cannot figure out which
    files are binary - a UTF-8 version of Korean will have lots of
    bytes with the top bit set. It is not informed about illegal
    character sequences by current Sun Java implementions.
  </p>
  <p>
    One trick for filtering containing only US-ASCII is to
    use the ISO-8859-1 encoding. This does not seem to contain
    illegal character sequences, and the lower 7 bits are US-ASCII.
    Another trick is to change the LANG environment variable from
    something like "us.utf8" to "us".
  </p>
    



</body></html>
