ant脚本的一些总结
来源:互联网 发布:南京江宁区网络问政 编辑:程序博客网 时间:2024/06/05 13:33
1、ant中调用os的命令:
1)可以使用exec标签来调用系统命令,由于ant是跨平台,所以系统既可以是windows也可以linux等。
2)这在Ant文档中已经提到了,在Windows下,不能直接调用dir、del(因为没有这个程序!)等,必须通过cmd.exe来调用:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="cmd.exe"> <arg line="/c dir"/> </exec> </target></project>
对于Unix,则可以直接调用ls:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="ls"/> </target></project>
也可以指明由Shell调用
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="/bin/sh"> <arg line="-c ls" /> </exec> </target></project>
我觉得后者要好一些,否则无法保证调用的是否系统命令,因为只要Path环境变量指明的路径下有一个同名的程序,都可能被调用到。
补充:通过Shell调用,Windows必须加 /c,Unix则是加 –c 。
1)对于-c ,linux中给的解释是:-c string If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.
即:shell会从-c后面的字符串读取命令,然后执行。
2)例如在linux命令行执行,sh -c ls
3)在java中调用linux命令也需要这样写:String[] cmd = new String[] { "/bin/sh", "-c", "ls" };
2、使用exec标签调用系统命令时,可以使用arg属性传递参数。有以下两种方式传递参数:
- <arg value="-c ls -a">
- <arg line="-c ls -a">
他们的区别是,value后面是一个命令行变量,可以包含空格,但整体作为一个变量传递给程序。line后面接的字符串,会按照空格进行分割,然后作为变量列表传给程序。
【实例】
假如我们扩充Windows平台下的例子,满足按修改时间倒序的要求:
解决办法有两个:
方案一:加引号:
方案二:使用<arg value>:
3、阻塞:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="cmd.exe"> <arg line="/c dir /o-d"/> </exec> </target></project>成功。换Unix了:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="/bin/sh"> <arg line="-c ls -ltr" /> </exec> </target></project>对不起,失败:java .lang.IOException。之所以这样,是因为<arg line>把每个空格分隔的字符串作为参数传给调用程序,但是对于”/bin/sh”来说,”ls –ltr”应该是一个参数而不是两个。
解决办法有两个:
方案一:加引号:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="/bin/sh"> <arg line="-c 'ls –ltr'" /> </exec> </target></project>
方案二:使用<arg value>:
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="/bin/sh"> <arg value="-c" /> <arg value="ls -ltr" /> </exec> </target></project>
3、阻塞:
不论是Windows还是Unix,调用一个程序后都必须等到该操作结束才能继续作下面的操作。如果你想调用一个程序的同时还做其它的工作 ,必须使用<parallel>:
需要注意的属性:
dir 指明程序执行的路径。对搜索程序也有影响
os 指明执行的平台
failonerror 缺省为false,即该命令执行了但是失败了,build仍然继续
<?xml version="1.0" ?><project name="testExec" default="test"> <target name="test"> <exec executable="notepad.exe"/> <echo message="You must close notepad first!"/> <parallel> <exec executable="notepad.exe"/> <echo message="You do not need to close notepad."/> <parallel> </target></project>
需要注意的属性:
dir 指明程序执行的路径。对搜索程序也有影响
os 指明执行的平台
failonerror 缺省为false,即该命令执行了但是失败了,build仍然继续
0 0
- ant脚本的一些总结
- ant脚本的一些使用
- ant一些总结
- ant脚本的介绍
- Ant脚本的使用
- shell脚本中一些特殊符号的总结
- 编写一个Excel脚本的一些总结
- ant的一些技巧!
- ant的一些知识
- ANT的一些用法
- Ant的一些知识
- ANT的一些操作
- axis部署的ant脚本
- ANT脚本的一个模板
- ant 编写的单元测试脚本
- 运行ANT脚本的步骤
- ant 的构建脚本0
- Ant脚本的详细配置
- SQL Server中OutPut子句的使用
- 函数式编程与面向对象的宗派之争
- ISING模型
- Eclipse的SVN下载地址
- Quart2D-画图
- ant脚本的一些总结
- 笔试算法题解析--二维数组右上到左下打印
- 总线的控制方式
- requestWindowFeature详解
- [BLE--SMP]蓝牙安全管理之SMP协议
- Linux文件权限详解
- does not contain bitcode
- IOS代理
- mac Yosemite下安装magento