|
- <html>
-
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <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 Ant is run on one of the specified operating
- systems.</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><arg></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</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 "os.name" system property.</td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">output</td>
- <td valign="top">the file to which the output of the command should be
- redirected.</td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">append</td>
- <td valign="top">whether output should be appended to or overwrite
- an existing file. 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.</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
- returncode other than 0. 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>
- </table>
- <h3>Examples</h3>
- <blockquote>
- <pre>
- <exec dir="${src}" executable="cmd.exe" os="Windows 2000" output="dir.txt">
- <arg line="/c dir"/>
- </exec></pre>
- </blockquote>
- <h3>Parameters specified as nested elements</h3>
- <h4>arg</h4>
- <p>Command line arguments should be specified as nested
- <code><arg></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><env></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.</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>
-
- <h3>Errors and return codes</h3>
- By default the return code of a <exec> is ignored; when you set
- <code>failonerror="true"</code> then any non zero response is treated as an
- error. 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 <exec> halts the build unless <code>failifexecutionfails</code>
- is set. 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 in include\error.h in your windows compiler or wine files;
- 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>
- <exec executable="emacs" >
- <env key="DISPLAY" value=":1.0"/>
- </exec>
- </pre></blockquote>
- <p>starts <code>emacs</code> on display 1 of the X Window System.</p>
- <blockquote><pre>
- <exec ... >
- <env key="PATH" path="${java.library.path}:${basedir}/bin"/>
- </exec>
- </pre></blockquote>
- <p>adds <code>${basedir}/bin</code> to the <code>PATH</code> of the
- system command.</p>
- <p><b>Note:</b> Although it may work for you to specify arguments using
- a simple arg-element and separate them by spaces it may fail if you switch to
- a newer version of the JDK. JDK < 1.2 will pass these as separate arguments
- to the program you are calling, JDK >= 1.2 will pass them as a single
- argument and cause most calls to fail.</p>
- <p><b>Note2:</b> If you are using Ant on Windows and a new DOS-Window pops up
- for every command which is executed this may be a problem of the JDK you are using.
- This problem may occur with all JDK's < 1.2.</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.
- <hr>
- <p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights
- Reserved.</p>
-
- </body>
- </html>
|