Cari di Apache Ant 
    Apache Ant User Manual
Daftar Isi
(Sebelumnya) EJB TasksFail (Berikutnya)
Apache Ant Tasks

Exec

Exec

Description

Executes a system command. When the os attribute is specified, thenthe command is only executed when Apache Ant is run on one of the specified operatingsystems.

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

If you want to execute an executable using a path relative to the project's basedir, you may need to use vmlauncher="false" on some operating systems - but even this may fail (Solaris 8/9 has been reported as problematic). The resolveexecutable attribute should be more reliable, as would be something like

  <property name="executable-full-path" location="../relative/path/to/executable"/>  <exec executable="${executable-full-path}" ...

Windows Users

The <exec> task delegates to Runtime.exec which in turnapparently calls ::CreateProcess. It is the latter Win32 function that definesthe exact semantics of the call. In particular, if you do not put a file extensionon the executable, only ".EXE" files are looked for, not ".COM", ".CMD" or other filetypes listed in the environment variable PATHEXT. That is only used by the shell.

Note that .bat files cannot in general by executed directly. One normally needs to execute the command shell executable cmd using the /c switch.

<target name="help">  <exec executable="cmd"> <arg value="/c"/> <arg value="ant.bat"/> <arg value="-p"/>  </exec></target>

A common problem is not having the executable on the PATH. In case you get an errormessage Cannot run program "...":CreateProcess error=2. The system cannot findthe path specified. have a look at your PATH variable. Just type the command directly onthe 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 programmto the PATH (set PATH=%PATH%;dirOfProgram) or specify the absolute path in theexecutable attribute in your buildfile.

Cygwin Users

The <exec> task will not understand paths such as /bin/shfor the executable parameter. This is because the Java VM in which Ant isrunning is a standard Windows executable and is not aware of the Cygwinenvironment (i.e., doesn't load cygwin1.dll). The onlywork-around for this is to compile a JVM under Cygwin (at your own risk).See for instance sun jdk 6 build instructions for cygwin.

OpenVMS Users

The command specified using executable and<arg> elements is executed exactly as specifiedinside a temporary DCL script. This has some implications:

  • paths have to be written in VMS style
  • if your executable points to a DCL script remember toprefix it with an @-sign(e.g. executable="@[FOO]BAR.COM"), just as you would in aDCL script
For <exec> to work in an environment with a Java VMolder than version 1.4.1-2 it is also required that the logicalJAVA$FORK_SUPPORT_CHDIR is set to TRUE inthe job table (see the JDK Release Notes).

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, thetask may falsely claim that an error occurred (or silently ignore anerror). Don't use this task to run JAVA.EXE, use a<java> task with the fork attributeset to true instead as this task will follow the VM'sinterpretation of exit codes.

RedHat S/390 Users

It has been reportedon the VMESA-LISTSERV that shell scripts invoked via the Ant Exectask must have their interpreter specified, i.e., the scripts muststart with something like:

#!/bin/bash
or the task will fail as follows:
[exec] Warning: UNIXProcess.forkAndExec native error: Exec format error[exec] Result: 255

Running Ant as a background process on Unix(-like) systems

If you run Ant as a background process (like ant &) and use the <exec> task with spawn set to false, you must provide explicit input to the forked process or Ant will be suspended because it tries to read from the standard input.

Parameters

Attribute Description Required
command the command to execute with all command line arguments. deprecated, use executable and nested <arg> elements instead. Exactly one of the two.
executable the command to execute without any command line arguments.
dir the directory in which the command should be executed. No
os 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. No
osfamily OS family as used in the <os> condition. since Ant 1.7 No
spawn whether or not you want the command to be spawned
Default is false.
If you spawn a command, its output will not be logged by ant.
The input, output, error, and result property settings are not active when spawning a process.
since Ant 1.6
No
output 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. No
error The file to which the standard error of the command should be redirected. since Ant 1.6 No
logError 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 "error" or "errorProperty" attributes, this will have no effect. since Ant 1.6 No
append Whether output and error files should be appended to or overwritten. Defaults to false. No
outputproperty 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. No
errorproperty The name of a property in which the standard error of the command should be stored. since Ant 1.6 No
input A file from which the executed command's standard input is taken. This attribute is mutually exclusive with the inputstring attribute. since Ant 1.6 No
inputstring A string which serves as the input stream for the executed command. This attribute is mutually exclusive with the input attribute. since Ant 1.6 No
resultproperty the name of a property in which the return code of the command should be stored. Only of interest if failonerror=false. No
timeout Stop the command if it doesn't finish within the specified time (given in milliseconds). No
failonerror Stop the buildprocess if the command exits with a return code signaling failure. Defaults to false. No
failifexecutionfails Stop the build if we can't start the program. Defaults to true. No
newenvironment Do not propagate old environment when new environment variables are specified. No, default is false
vmlauncher 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. No, default is true
resolveexecutable 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. since Ant 1.6 No, default is false
searchpath When this attribute is true, then system path environment variables will be searched when resolving the location of the executable. since Ant 1.6.3 No, default is false

Examples

<exec dir="${src}" executable="cmd.exe" os="Windows 2000" output="dir.txt">  <arg line="/c dir"/></exec>

Parameters specified as nested elements

arg

Command line arguments should be specified as nested<arg> elements. See Command line arguments.

env

It is possible to specify environment variables to pass to thesystem command via nested <env> elements.

Attribute Description Required
key The name of the environment variable.
Note: (Since Ant 1.7) For windows, the name is case-insensitive.
Yes
value The literal value for the environment variable. Exactly one of these.
path 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.
file The value for the environment variable. Will be replaced by the absolute filename of the file by Ant.

redirector

Since Ant 1.6.2

A nested I/O Redirectorcan be specified. In general, the attributes of the redirector behaveas the corresponding attributes available at the task level. The mostnotable peculiarity stems from the retention of the <exec>attributes for backwards compatibility. Any file mapping is doneusing a null sourcefile; therefore not allMapper types will returnresults. When no results are returned, redirection specificationswill fall back to the task level attributes. In practice this means thatdefaults can be specified for input, output, and error output files.

Errors and return codes

By default the return code of a <exec> is ignored; when you setfailonerror="true" then any return code signaling failure(OS specific) causes the build to fail. Alternatively, you can setresultproperty to the name of a property and have it assigned tothe result code (barring immutability, of course).

If the attempt to start the program fails with an OS dependent error code,then <exec> halts the build unless failifexecutionfailsis set to false. You can use that to run a program if it exists, butotherwise do nothing.

What do those error codes mean? Well, they are OS dependent. On Windowsboxes you have to look atthe documentation; error code 2 means 'no such program', which usually meansit is not on the path. Any time you see such an error from any Ant task, it isusually not an Ant bug, but some configuration problem on your machine.

Examples

<exec executable="emacs">  <env key="DISPLAY" value=":1.0"/></exec>

starts emacs on display 1 of the X Window System.

<property environment="env"/><exec ... >  <env key="PATH" path="${env.PATH}:${basedir}/bin"/></exec>

adds ${basedir}/bin to the PATH of thesystem command.

<property name="browser" location="C:/Program Files/Internet Explorer/iexplore.exe"/><property name="file" location="ant/docs/manual/index.html"/><exec executable="${browser}" spawn="true"> <arg value="${file}"/></exec>

Starts the ${browser} with the specified ${file} and end theAnt process. The browser will remain.

<exec executable="cat"> <redirector outputproperty="redirector.out" errorproperty="redirector.err" inputstring="blah before blah"> <inputfilterchain> <replacestring from="before" to="after"/> </inputfilterchain> <outputmapper type="merge" to="redirector.out"/> <errormapper type="merge" to="redirector.err"/> </redirector></exec>
Sends the string "blah before blah" to the "cat" executable,using an <inputfilterchain>to replace "before" with "after" on the way in.Output is sent to the file "redirector.out" and storedin a property of the same name. Similarly, error output is sent toa file and a property, both named "redirector.err".

Note: do not try to specify arguments usinga simple arg-element and separate them by spaces. This results inonly a single argument containing the entire string.

Timeouts: If a timeout is specified, when it is reached thesub process is killed and a message printed to the log. The returnvalue of the execution will be "-1", which will halt the build iffailonerror=true, but be ignored otherwise.

(Sebelumnya) EJB TasksFail (Berikutnya)