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

<body>

<h2><a name="exec">Exec</a></h2>
<h3>Description</h3>
<p>Executes a system command. When the <i>os</i> attribute is specified, then
the command is only executed when Apache Ant is run on one of the specified operating
systems.</p>

<p>Note that you cannot interact with the forked program, the only way
to send input to it is via the input and inputstring attributes. Also note that
since Ant 1.6, any attempt to read input in the forked program will receive an
EOF (-1). This is a change from Ant 1.5, where such an attempt would block.</p>

<p>If you want to execute an executable using a path relative to the
  project's basedir, you may need to
  use <code>vmlauncher="false"</code> on some operating systems - but
  even this may fail (Solaris 8/9 has been reported as problematic).
  The <code>resolveexecutable</code> attribute should be more
  reliable, as would be something like
<pre>
  &lt;property name="executable-full-path"
            location="../relative/path/to/executable"/&gt;
  &lt;exec executable="${executable-full-path}" ...
</pre>
</p>

<h4>Windows Users</h4>
<p>The <code>&lt;exec&gt;</code> task delegates to <code>Runtime.exec</code> which in turn
apparently calls <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp">
<code>::CreateProcess</code></a>. It is the latter Win32 function that defines
the exact semantics of the call. In particular, if you do not put a file extension
on the executable, only ".EXE" files are looked for, not ".COM", ".CMD" or other file
types listed in the environment variable PATHEXT. That is only used by the shell.
</p>
  <p>
    Note that <em>.bat</em> files cannot in general by executed directly.
    One normally needs to execute the command shell executable <code>cmd</code>
    using the <code>/c</code> switch.
  </p>
  <blockquote>
<pre>
&lt;target name="help"&gt;
  &lt;exec executable="cmd"&gt;
    &lt;arg value="/c"/&gt;
    &lt;arg value="ant.bat"/&gt;
    &lt;arg value="-p"/&gt;
  &lt;/exec&gt;
&lt;/target&gt;
</pre></blockquote>

<p>A common problem is not having the executable on the PATH. In case you get an error
message <tt>Cannot run program "...":CreateProcess error=2. The system cannot find
the path specified.</tt> have a look at your PATH variable. Just type the command directly on
the command line and if Windows finds it, Ant should do it too. (Otherwise ask on the user mailinglist for help.) If Windows can not execute the program add the directory of the program
to the PATH (<tt>set PATH=%PATH%;dirOfProgram</tt>) or specify the absolute path in the
<tt>executable</tt> attribute in your buildfile.
</p>


<h4>Cygwin Users</h4>
<p>The <code>&lt;exec&gt;</code> task will not understand paths such as /bin/sh
for the executable parameter.  This is because the Java VM in which Ant is
running is a standard Windows executable and is not aware of the Cygwin
environment (i.e., doesn't load <code>cygwin1.dll</code>).  The only
work-around for this is to compile a JVM under Cygwin (at your own risk).
See for instance 
<a href="http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html#cygwin">
OpenJDK build instructions for cygwin</a>.
</p>

<h4>OpenVMS Users</h4>
<p>The command specified using <code>executable</code> and
<code>&lt;arg&gt;</code> elements is executed exactly as specified
inside a temporary DCL script.  This has some implications:
<ul>
  <li>the DCL script will be created inside
  the <a href="../running.html#tmpdir">temporary directory</a>.</li>
<li>paths have to be written in VMS style</li>
<li>if your <code>executable</code> points to a DCL script remember to
prefix it with an <code>@</code>-sign
(e.g. <code>executable="@[FOO]BAR.COM"</code>), just as you would in a
DCL script</li>
</ul>
For <code>&lt;exec&gt;</code> to work in an environment with a Java VM
older than version 1.4.1-2 it is also <i>required</i> that the logical
<code>JAVA$FORK_SUPPORT_CHDIR</code> is set to <code>TRUE</code> in
the job table (see the <i>JDK Release Notes</i>).</p>

<p>Please note that the Java VM provided by HP doesn't follow OpenVMS'
conventions of exit codes.  If you run a Java VM with this task, the
task may falsely claim that an error occurred (or silently ignore an
error).  Don't use this task to run <code>JAVA.EXE</code>, use a
<code>&lt;java&gt;</code> task with the <code>fork</code> attribute
set to <code>true</code> instead as this task will follow the VM's
interpretation of exit codes.</p>

<h4>RedHat S/390 Users</h4>

<p>It has been <a
href="http://listserv.uark.edu/scripts/wa.exe?A1=ind0404&L=vmesa-l#33">reported
on the VMESA-LISTSERV</a> that shell scripts invoked via the Ant Exec
task must have their interpreter specified, i.e., the scripts must
start with something like:

<blockquote>
<pre>
#!/bin/bash
</pre>
</blockquote>

or the task will fail as follows:

<blockquote>
<pre>
[exec] Warning: UNIXProcess.forkAndExec native error: Exec format error
[exec] Result: 255
</pre>
</blockquote>
</p>

<h4><a name="background">Running Ant as a background process on
    Unix(-like) systems</a></h4>

<p>If you run Ant as a background process (like <code>ant &</code>)
  and use the <code>&lt;exec&gt;</code> task with <code>spawn</code>
  set to <code>false</code>, you must provide explicit input to the
  forked process or Ant will be suspended because it tries to read
  from the standard input.</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">command</td>
    <td valign="top">the command to execute with all command line
      arguments. <b>deprecated, use executable and nested
      <code>&lt;arg&gt;</code> elements instead</b>.</td>
    <td align="center" rowspan="2">Exactly one of the two.</td>
  </tr>
  <tr>
    <td valign="top">executable</td>
    <td valign="top">the command to execute without any command line
      arguments.</td>
  </tr>
  <tr>
    <td valign="top">dir</td>
    <td valign="top">the directory in which the command should be executed.</td>
    <td align="center" valign="top">No.<br/>
      <strong>Note:</strong> the default used when dir has not been
      specified depends on the <code>vmlauncher</code> attribute.  If
      <code>vmlauncher</code> is <code>true</code> the task will use
      the current working directory, otherwise it uses the project's basedir.
    </td>
  </tr>
  <tr>
    <td valign="top">os</td>
    <td valign="top">list of Operating Systems on which the command may be
      executed. If the current OS's name is contained in this list, the command will
      be executed. The OS's name is determined by the Java Virtual machine and is set
      in the &quot;os.name&quot; system property.
      </td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">osfamily</td>
    <td valign="top">OS family as used in the &lt;os&gt; condition.
    <em>since Ant 1.7</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">spawn</td>
    <td valign="top">whether or not you want the command to be spawned<br>
    Default is false.<br>
    If you spawn a command, its output will not be logged by ant.<br>
    The input, output, error, and result property settings are not active when spawning a process.<br>
    <em>since Ant 1.6</em>
    </td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">output</td>
    <td valign="top">Name of a file to which to write the output. If the error stream
      is not also redirected to a file or property, it will appear in this output.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">error</td>
    <td valign="top">The file to which the standard error of the
    command should be redirected.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">logError</td>
    <td valign="top">This attribute is used when you wish to see error output in Ant's
                     log and you are redirecting output to a file/property. The error
                     output will not be included in the output file/property. If you
                     redirect error with the &quot;error&quot; or &quot;errorProperty&quot;
                     attributes, this will have no effect.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">append</td>
    <td valign="top">Whether output and error files should be appended to or overwritten.
    Defaults to false.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">outputproperty</td>
    <td valign="top">The name of a property in which the output of the
      command should be stored. Unless the error stream is redirected to a separate
      file or stream, this property will include the error output.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">errorproperty</td>
    <td valign="top">The name of a property in which the standard error of the
      command should be stored.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">input</td>
    <td valign="top">A file from which the executed command's standard input
                     is taken. This attribute is mutually exclusive with the
                     inputstring attribute.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">inputstring</td>
    <td valign="top">A string which serves as the input stream for the
                     executed command. This attribute is mutually exclusive with the
                     input attribute.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">resultproperty</td>
    <td valign="top">the name of a property in which the return code of the
      command should be stored. Only of interest if failonerror=false.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">timeout</td>
    <td valign="top">Stop the command if it doesn't finish within the
      specified time (given in milliseconds).</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">failonerror</td>
    <td valign="top">Stop the buildprocess if the command exits with a
      return code signaling failure. Defaults to false.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">failifexecutionfails</td>
    <td valign="top">Stop the build if we can't start the program.
      Defaults to true. </td>
    <td align="center" valign="top">No</td>
  </tr>  <tr>
    <td valign="top">newenvironment</td>
    <td valign="top">Do not propagate old environment when new environment
      variables are specified.</td>
    <td align="center" valign="top">No, default is <i>false</i></td>
  </tr>
  <tr>
    <td valign="top">vmlauncher</td>
    <td valign="top">Run command using the Java VM's execution facilities
        where available. If set to false the underlying OS's shell,
        either directly or through the antRun scripts, will be used.
        Under some operating systems, this gives access to facilities
        not normally available through the VM including, under Windows,
        being able to execute scripts, rather than their associated
        interpreter.  If you want to specify the name of the
        executable as a relative path to the directory given by the
        dir attribute, it may become necessary to set vmlauncher to
        false as well.</td>
    <td align="center" valign="top">No, default is <i>true</i></td>
  </tr>
  <tr>
    <td valign="top">resolveexecutable</td>
    <td valign="top">When this attribute is true, the name of the executable
                     is resolved firstly against the project basedir and
                     if that does not exist, against the execution
                     directory if specified. On Unix systems, if you only
                     want to allow execution of commands in the user's path,
                     set this to false.  <em>since Ant 1.6</em></td>
    <td align="center" valign="top">No, default is <i>false</i></td>
  </tr>
  <tr>
    <td valign="top">searchpath</td>
    <td valign="top">When this attribute is true, then
                     system path environment variables will
                     be searched when resolving the location
                     of the executable. <em>since Ant 1.6.3</em></td>
    <td align="center" valign="top">No, default is <i>false</i></td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
&lt;exec dir=&quot;${src}&quot; executable=&quot;cmd.exe&quot; os=&quot;Windows 2000&quot; output=&quot;dir.txt&quot;&gt;
  &lt;arg line=&quot;/c dir&quot;/&gt;
&lt;/exec&gt;</pre>
</blockquote>
<h3>Parameters specified as nested elements</h3>
<h4>arg</h4>
<p>Command line arguments should be specified as nested
<code>&lt;arg&gt;</code> elements. See <a
href="../using.html#arg">Command line arguments</a>.</p>
<h4><a name="env">env</a></h4>
<p>It is possible to specify environment variables to pass to the
system command via nested <code>&lt;env&gt;</code> elements.</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">key</td>
    <td valign="top">
      The name of the environment variable.
      <br/>
      <em>Note: (Since Ant 1.7)</em>
      For windows, the name is case-insensitive.
    </td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">value</td>
    <td valign="top">The literal value for the environment variable.</td>
    <td align="center" rowspan="3">Exactly one of these.</td>
  </tr>
  <tr>
    <td valign="top">path</td>
    <td valign="top">The value for a PATH like environment
      variable. You can use ; or : as path separators and Ant will
      convert it to the platform's local conventions.</td>
  </tr>
  <tr>
    <td valign="top">file</td>
    <td valign="top">The value for the environment variable. Will be
      replaced by the absolute filename of the file by Ant.</td>
  </tr>
</table>
<a name="redirector"><h4>redirector</h4></a>
<i><b>Since Ant 1.6.2</b></i>
<p>A nested <a href="../Types/redirector.html">I/O Redirector</a>
can be specified.  In general, the attributes of the redirector behave
as the corresponding attributes available at the task level.  The most
notable peculiarity stems from the retention of the &lt;exec&gt;
attributes for backwards compatibility.  Any file mapping is done
using a <CODE>null</CODE> sourcefile; therefore not all
<a href="../Types/mapper.html">Mapper</a> types will return
results.  When no results are returned, redirection specifications
will fall back to the task level attributes.  In practice this means that
defaults can be specified for input, output, and error output files.
</p>
<h3>Errors and return codes</h3>
By default the return code of a <code>&lt;exec&gt;</code> is ignored; when you set
<code>failonerror="true"</code> then any return code signaling failure
(OS specific) causes the build to fail. Alternatively, you can set
<code>resultproperty</code> to the name of a property and have it assigned to
the result code (barring immutability, of course).
<p>
If the attempt to start the program fails with an OS dependent error code,
then <code>&lt;exec&gt;</code> halts the build unless <code>failifexecutionfails</code>
is set to <code>false</code>. You can use that to run a program if it exists, but
otherwise do nothing.
<p>
What do those error codes mean? Well, they are OS dependent. On Windows
boxes you have to look at
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes__0-499_.asp">
the documentation</a>; error code 2 means 'no such program', which usually means
it is not on the path. Any time you see such an error from any Ant task, it is
usually not an Ant bug, but some configuration problem on your machine.

<h3>Examples</h3>
<blockquote><pre>
&lt;exec executable=&quot;emacs&quot;&gt;
  &lt;env key=&quot;DISPLAY&quot; value=&quot;:1.0&quot;/&gt;
&lt;/exec&gt;
</pre></blockquote>
<p>starts <code>emacs</code> on display 1 of the X Window System.</p>

<blockquote><pre>
&lt;property environment=&quot;env&quot;/&gt;
&lt;exec ... &gt;
  &lt;env key=&quot;PATH&quot; path=&quot;${env.PATH}:${basedir}/bin&quot;/&gt;
&lt;/exec&gt;
</pre></blockquote>
<p>adds <code>${basedir}/bin</code> to the <code>PATH</code> of the
system command.</p>

<blockquote><pre>
&lt;property name="browser" location="C:/Program Files/Internet Explorer/iexplore.exe"/&gt;
&lt;property name="file" location="ant/docs/manual/index.html"/&gt;

&lt;exec executable="${browser}" spawn="true"&gt;
    &lt;arg value="${file}"/&gt;
&lt;/exec&gt;
</pre></blockquote>
<p>Starts the <i>${browser}</i> with the specified <i>${file}</i> and end the
Ant process. The browser will remain.</p>

<blockquote><pre>
&lt;exec executable=&quot;cat&quot;&gt;
    &lt;redirector outputproperty=&quot;redirector.out&quot;
                errorproperty=&quot;redirector.err&quot;
                inputstring=&quot;blah before blah&quot;&gt;
        &lt;inputfilterchain&gt;
            &lt;replacestring from=&quot;before&quot; to=&quot;after&quot;/&gt;
        &lt;/inputfilterchain&gt;
        &lt;outputmapper type=&quot;merge&quot; to=&quot;redirector.out&quot;/&gt;
        &lt;errormapper type=&quot;merge&quot; to=&quot;redirector.err&quot;/&gt;
    &lt;/redirector&gt;
&lt;/exec&gt;
</pre></blockquote>

Sends the string &quot;blah before blah&quot; to the &quot;cat&quot; executable,
using an <a href="../Types/filterchain.html">&lt;inputfilterchain&gt;</a>
to replace &quot;before&quot; with &quot;after&quot; on the way in.
Output is sent to the file &quot;redirector.out&quot; and stored
in a property of the same name.  Similarly, error output is sent to
a file and a property, both named &quot;redirector.err&quot;.


<p><b>Note:</b> do not try to specify arguments using
a simple arg-element and separate them by spaces. This results in
only a single argument containing the entire string.</p>
<p>
<b>Timeouts: </b> If a timeout is specified, when it is reached the
sub process is killed and a message printed to the log. The return
value of the execution will be "-1", which will halt the build if
<tt>failonerror=true</tt>, but be ignored otherwise.



</body>
</html>

