五.使用Ant运行本地程序
1.使用Ant运行windows的批处理文件
要在Ant内运行一个外部程序,应使用<exec>任务.它允许你执行下列操作:
l 指定程序名和要传入的参数.
l 命名运行目录.
l 使用failonerror标志来控制当应用程序失败时是否停止构建.
l 指定一个最大程序持续时间,时间超过则中止程序.任务在这时被认为是失败,但是至少构建会中止,而不是挂起,这对于自动构建是至关重要的.
l 将输出存到一个文件或特性.
l 指定java调用本地程序时需要预先设定的环境变量.
下面来看一个例子:
批处理文件:
Test.bat
@echo off
echo Hello > test.txt
|
build.xml
<?xml version="1.0"?>
<project name="batch" default="extract" basedir=".">
<target name="extract">
<exec executable ="cmd">
<arg line="/c a.bat"/>
</exec>
</target>
</project>
|
使用executable元素标记指定使用的命令,具体用法可以在命令行下面输入help cmd查看.如果你希望在运行批处理发生错误时中止构建需要设定failοnerrοr="on".加入你的外部程序在某个时刻挂起,也许是在与远程站点对话,而你不希望构建永远被挂起,Ant提供了timeout这个属性,他是一个以毫秒为单位的数字.下面看一下如何使用Ant来运行tomcat.
启动tomcat需要两个环境变量CATALINA_HOME, JAVA_HOME,如果你在环境变量中已经设定,在Ant中就不需要进行处理,如果没有需要使用<env>属性来设定,你也可以使用<env>属性覆盖你以前的环境变量.
<?xml version="1.0"?>
<project name="batch" default="tomcat-start" basedir=".">
<property name="tomcat.dir" value="C:\Tomcat5"></property>
<target name="tomcat-start">
<exec dir="${tomcat.dir}/bin" executable="cmd">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="/C startup.bat"/>
</exec>
</target>
</project>
|
2.使用Ant运行shell文件
由于windowsXP的cmd默认没有安装ps,bash等命令,所以我们需要借助的三方的软件来实现这个功能,这里使用cgywin,将cgywin的bin目录加到环境变量的Path里面(下面使用Ant运行cvs也会用到).
<?xml version="1.0"?>
<project name="batch" default="shell" basedir=".">
<property name="tomcat.dir" value="C:\Tomcat5"></property>
<target name="shell">
<exec dir="${tomcat.dir}/bin" executable="bash">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="startup.sh"/>
</exec>
</target>
</project>
|
3.使用Ant运行cvs
Ant内置cvs属性,可以很方便的使用cvs:
<?xml version="1.0"?>
<project name="batch" default="shell" basedir=".">
<property name="cvs.root" value="..."></property>
<target name="cvs">
<cvs cvsroot="cvs.root" command="checkout ../.."/>
</target>
</project>
|
如果你的Documents and Settings中有.cvspass文件,那么可以不用设定cvsroot,Ant会自动寻找.
六.工程的打包部署
工程的打包,主要就是文件的操作,下面通过例子简单介绍一下文件的移动,复制和删除.
<?xml version="1.0"?>
<project name="project" default="jar">
<target name="copy">
<tstamp>
<format property="time.format" pattern="yyyy-mm-dd'T'HH:mm:ss"
locale="en"/>
</tstamp>
<copy tofile="dist/readme" file="test.txt">
<filterset>
<filter token="TIME" value="${time.format}"/>
</filterset>
</copy>
</target>
<target name="move">
<move todir="dist">
<fileset dir="lib">
<include name="*.jar"/>
|