Ant 参考
http://ant.apache.org/manual/Tasks/exec.html
Exec
Description
Executes a system command. When the os attribute is specified, then the command is only executed when Apache Ant is run on one of the specified operating systems.
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.
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 turn apparently calls ::CreateProcess
. 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.
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 error message Cannot run program "...":CreateProcess error=2. The system cannot find the path specified. 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 (set PATH=%PATH%;dirOfProgram) or specify the absolute path in the executable attribute in your buildfile.
Cygwin Users
The <exec>
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 cygwin1.dll
). The only work-around for this is to compile a JVM under Cygwin (at your own risk). See for instance OpenJDK build instructions for cygwin.
OpenVMS Users
The command specified using executable
and <arg>
elements is executed exactly as specified inside 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 to prefix it with an@
-sign (e.g.executable="@[FOO]BAR.COM"
), just as you would in a DCL script
For <exec>
to work in an environment with a Java VM older than version 1.4.1-2 it is also required that the logical JAVA$FORK_SUPPORT_CHDIR
is set to TRUE
in the 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, the task may falsely claim that an error occurred (or silently ignore an error). Don't use this task to run JAVA.EXE
, use a <java>
task with the fork
attribute set to true
instead as this task will follow the VM's interpretation of exit codes.
RedHat S/390 Users
It has been reported on the VMESA-LISTSERV that shell scripts invoked via the Ant Exec task must have their interpreter specified, i.e., the scripts must start 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. Note: the default used when dir has not been specified depends on the vmlauncher attribute. If vmlauncher is true the task will use the current working directory, otherwise it uses the project's basedir. |
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 the system 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 Redirector 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 <exec> attributes for backwards compatibility. Any file mapping is done using a null
sourcefile; therefore not all Mapper 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.
Errors and return codes
By default the return code of a <exec>
is ignored; when you set failonerror="true"
then any return code signaling failure (OS specific) causes the build to fail. Alternatively, you can set resultproperty
to the name of a property and have it assigned to the 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 failifexecutionfails
is set to false
. You can use that to run a program if it exists, but otherwise do nothing.
What do those error codes mean? Well, they are OS dependent. On Windows boxes you have to look at the documentation; 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.
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 the system 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 the Ant 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 stored in a property of the same name. Similarly, error output is sent to a file and a property, both named "redirector.err".
Note: 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.
Timeouts: 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 failonerror=true, but be ignored otherwise.
Ant 参考的更多相关文章
- CentOS5.5下安装Ant
从yum源直接下ant: [root@master local]$ yum install ant 运行ant,发现报错: java.lang.NoClassDefFoundError: org/ap ...
- jenkins+jmeter+ant+jmeter在Jenkins上报告
1.jmeter+ant 参考 http://www.cnblogs.com/dieyaxianju/p/8268802.html 2.在jenkins上配置 3.执行成功 4.配置报告 参考 下载 ...
- 体验phonegap3.0
网上有各种各样的phonegap环境搭建资料,鉴于学习和整理的考虑,我还是把我搭建的过程整理出来 这篇文章中将涉及到的内容 PhoneGap环境需要的组件 Node环境 JDK Android SDK ...
- eclipse连接远程hadoop集群开发时0700问题解决方案
eclipse连接远程hadoop集群开发时报错 错误信息: Exception in thread "main" java.io.IOException:Failed to se ...
- eclipse导入tomcat源码
我的开发环境:windows7 64位 一.官网下载tomcat源码.在此奉上一站地址:http://archive.apache.org/dist/tomcat/: 二.编译源码生成.jar文件: ...
- 一个完整的JENKINS下的ANT BUILD.XML文件(Jenkins可以参考)
一个完整的JENKINS下的ANT BUILD.XML文件 <?xml version="1.0" encoding="UTF-8"?> <p ...
- react 编写 基于ant.design 页面的参考笔记
前言 因为我没有系统的学习 react,是边写边通过搜索引擎找相对的问题,看 ant.design的 中文文档 编写的一个单页面, 以下的笔记都是写 gksvideourlr 时记录的. 重新设定表单 ...
- React中使用Ant Table组件
一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启 ...
- [Ant]Ant简易教程
前言 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. Ant是纯Java语言编写的,所以具有 ...
随机推荐
- jQuery复习:第二章&第三章
第二章 一.选择器 1.层次选择器 $(“ancestor descendant”)选取ancestor元素里的所有后代元素 $(“parent > child”)选取parent元素下的chi ...
- JavaScript的BOM(浏览器对象)基础语法总结
1.window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 2.history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. ...
- rabbitmq(1)-入门
参考: documentation: https://www.rabbitmq.com/documentation.htmldemo: https://www.rabbitmq.com/getstar ...
- SecureCRT 7.3.4破解版(含注册机)
不用说你肯定知道SecureCRT用途是什么,这个号称最好用的ssh连接工具却不是免费的,所以找了很久才找到最新版本的SecureCRT 7.3.4破解版,其实只要是SecureCRT 7.3.x版本 ...
- [转]详细的mysql时间和日期函数
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...
- php 积少成多!
- 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1
题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...
- 【Machine Learning in Action --3】决策树ID3算法
1.简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定 ...
- 关于echarts使用的各种问题
此文为作者辛苦编写,如有转发,请注明出处,谢谢 首先引入js文件,这是动态引入 <script src="http://echarts.baidu.com/build/dist/ech ...
- WCF部署在IIS上
WCF部署在IIS上 环境vs2010,WCF应用程序.如何将WCF部署在IIS上. 第一步:右键点击项目,选择生成部署包. 第二步:在你项目所在的文件目录下找到Package文件夹,这就是我们的部署 ...