分类: Java
2011-07-05 13:39:10
http://www.cnblogs.com/codinglife/archive/2010/09/21/1831934.html
Ant这东西上手起来很快,无非就是看看manaul,写写xml. 不过不论学习什么,具体细节过程总会有各种问题.下面是我遇到并解决的小问题(windows环境)
1. ant中怎么使用c操作系统环境变量
主要是用到ant中的env这个值, environment的前三个字符。 使用方法:
<project name="Build" default="test" basedir=".">
<property environment="env"/>
<property name="SystemRoot.path" value="${env.SystemRoot}" />
<property name="ANT_HOME.path" value="${env.ANT_HOME}" />
<property name="OS.type" value="${env.OS}" />
<target name="test">
<echo message="The path of system root: ${SystemRoot.path}" />
<echo message="The path of ant home: ${ANT_HOME.path}" />
<echo message="The type of OS: ${OS.type}" />
target>
project>
2. ant中怎么调用cmd中的命令
使用<exec executable="cmd">和其参数<arg line="/c ......" />
比如我要用cmd中的方式输出当前的日期和时间:
<project name="Build" default="test" basedir=".">
<target name="test">
<exec executable="cmd">
<arg line="/c echo Hi, dude, the date is %date%, and the time is %time%" />
exec>
target>
project>
3. ant中怎么执行第三方程序
与上面类似, 只不过executable的值换成第三方app地址, 参数line的值换成app需要的参数值
4. ant怎么传入参数
ant命令后面这样加参数 ant -DYourArgName=YourArgValue, 就是参数要跟在-D后面, 然后build文件就可以通过 ${YourArgName}使用这个参数了。
比如我要传入两个参数BuildProject.name和BuildProject.info
ant -DBuildProject.name=ATestProject -DBuildProject.info=nothing
Build文件中就可以这样使用:
<project name="Build" default="test" basedir=".">
<target name="test">
<echo message="The project name is ${BuildProject.name}, and this guy wants to say ${BuildProject.info}" />
target>
project>
5. ant中如何从文件里读取内容
使用ant中的loadfile命令,可以将文件内容读取到一个property中
<project name="Build" default="test" basedir=".">
<target name="test">
<loadfile property="MessageFromFile" srcFile="ContentInFile.txt"/>
<echo message="${MessageFromFile}" />
target>
project>
6. ant中如何输出log到文件
如果打算把整个ant执行都输出到Log,请使用ant的 -l 参数
ant -l antlog.log
如果只是想在ant中输出想输出的信息到log, 请参考第2条
<project name="Build" default="test" basedir=".">
<target name="test">
<exec executable="cmd">
<arg line="/c echo print this message to the log>>log.txt" />
exec>
target>
project>
7. ant中executable中程序参数中如何使用双引号
正常情况吓死, arg中的值不能直接使用双引号, 否则会出错. 请使用xml中双引号的描述符 "代替
小经验:
1. target的执行逻辑要明细,也就是要组织好我们的target,target量比较大尤其要这样。 最初每个target可以不实现, 只需echo出你懂的message即可, 这样你好先把真那个执行逻辑理清, 后面顺着清晰的思路写就行了。每个target的name要仔细思考,也是为了顺脑。
2. 涉及经常变化的、路径相关的属性写进属性文件里, Build文件本身不应该有太多具体的属性值,因为一旦有变化, 修改起来就比较不顺手。 而且这会让build文件更轻量、更好看, 其它需要配置脚本的人员也不需要了解你的具体执行逻辑, 在你的属性文件里进行更改即可
3. 网上大多数例子都是ant和java结合使用的, 实际上只要环境变量有了, ant和其它语言也可以结合, 看自己需求了. 为了某些需求,甚至可以写一些简单的app用在你的ant里。比如我自己,因为特殊情况,写了个拿文件版本的app用在ant里, 为了使solution和输出文件的压缩打包文件占用空间更小,我没用ant自带的zip, 而是用了7z command版,每次编译还是可以节约不少空间的。(真是为了达到目的,不择手段呀)
4. 用一些ant库,可能会让你事半功倍
Ant毕竟是描述性的xml,做逻辑处理十分难受, 代码重用也要绕很大弯子. 这方面讨论有条比较好的
类似的build tools有maven和