http://www.blogjava.net/x-29/archive/2007/04/09/109466.html
正确的安装Ant和设置好环境变量后,就可以开始运行ant了。
运行Ant很简单,只要输入ant就可以了
运行Ant很简单,只要输入ant就可以了
D:\>ant
Buildfile: build.xml does not exist!
Build failed
D:\>
没有指定任何参数时,Ant会在当前目录下寻找build.xml文件。如果找到了就用该文件作为buildfile。
Buildfile: build.xml does not exist!
Build failed
D:\>
如果,使用Ant的-find选择,就会在当前目录的上级目录查找build.xml文件,一直到达文件系统的根。
上面说得的都是默认的buildfile,要想使用指定的buildfile,可以使用-buildfile file参数,这里file就是指定的要查找的buildfile。
D:\>ant -find
上面说得的都是默认的buildfile,要想使用指定的buildfile,可以使用-buildfile file参数,这里file就是指定的要查找的buildfile。
D:\>ant -buildfile hibernate-build.xml
也可以在Ant命令之后指定执行一个或者多个target,缺省情况下,Ant使用<project>标签中default属性所指定的target。
D:\>ant -buildfile hibernate-build.xml compile
"complie"就是一个target
下面来看一些具体的例子
D:\>Ant
使用当前目录下的build.xml运行ant,执行缺省的target(也就是<project>标答中default属性所设写的target)
D:\>Ant -buildfile hibernate-build.xml
使用当前目录下的hibernate-build.xml运行ant,执行缺省的target。
D:\>And -buildfile hibernate-build.xml compile
使用当前目录下的hibernate-build.xml运行ant,并执行名为"complie"的target。
D:\>Ant
使用当前目录下的build.xml运行ant,执行缺省的target(也就是<project>标答中default属性所设写的target)
D:\>Ant -buildfile hibernate-build.xml
使用当前目录下的hibernate-build.xml运行ant,执行缺省的target。
D:\>And -buildfile hibernate-build.xml compile
使用当前目录下的hibernate-build.xml运行ant,并执行名为"complie"的target。
-------------------------------------------
现在来看一下,如何编写Ant的buildfile.
buildfile是一个xml文档,默认命名为build.xml,在Ant的buildfile中,我们可以设定属性[property]、任务[task],每个buildfile中可以设定多个任务[task],这些任务可以是编译源码、生成Doc文档、程序测试等;通常会将这些任务组织为一个目标[target]。
buildfile是一个xml文档,默认命名为build.xml,在Ant的buildfile中,我们可以设定属性[property]、任务[task],每个buildfile中可以设定多个任务[task],这些任务可以是编译源码、生成Doc文档、程序测试等;通常会将这些任务组织为一个目标[target]。
看一个简单的build.xml,大概了解一下
可以看到build.xml中,project作为根元素(每个buildfile中都会有一个project),然后是定义了两个属性以及一个target。
<
project
name
="addressbook"
default
="compile"
basedir
="."
>
<!-- ===================== Property Definitions =========================== -->
< property name ="tomcat.home" value ="C:/jakarta-tomcat" />
< property name ="app.home" value ="." />
< property name ="src.home" value ="${app.home}/src" />
< property name ="lib.home" value ="${app.home}/WEB-INF/lib" />
< property name ="classes.home" value ="${app.home}/WEB-INF/classes" />
<!-- ==================== "compile" Target ============================= -->
< target name ="compile" >
< javac srcdir ="${src.home}" destdir ="${classes.home}" debug ="yes" >
< classpath refid ="compile.classpath" />
</ javac >
</ target >
</ project >
<!-- ===================== Property Definitions =========================== -->
< property name ="tomcat.home" value ="C:/jakarta-tomcat" />
< property name ="app.home" value ="." />
< property name ="src.home" value ="${app.home}/src" />
< property name ="lib.home" value ="${app.home}/WEB-INF/lib" />
< property name ="classes.home" value ="${app.home}/WEB-INF/classes" />
<!-- ==================== "compile" Target ============================= -->
< target name ="compile" >
< javac srcdir ="${src.home}" destdir ="${classes.home}" debug ="yes" >
< classpath refid ="compile.classpath" />
</ javac >
</ target >
</ project >
可以看到build.xml中,project作为根元素(每个buildfile中都会有一个project),然后是定义了两个属性以及一个target。
project元素和target元素的属性,可以看下面的表。
标签 | 属性 | 描述 | 必需的 |
project | name | 项目名称 | No |
default | 没有指定target时,缺省使用的target | Yes | |
basedir | 作为计算其它路径的基路径。该属性可以被basedir property覆盖,当覆盖时,该属性被忽略。如果属性和basedir property都没有设定,就使用buildfile文件的父目录 | No | |
target | name | target的名字 | Yes |
depends | 用逗号隔开的target名字列表,设定些属性,就意味着本target将依赖于depends设定的target | No | |
if | 执行target所需设定的属性名 | No | |
unless | 执行target所需要清除设定的属性名 | No | |
description | 关于target的描述 | No |
在使用
提示:我们可以在ant后面指定想要执行的target,缺省情况下会使用默认的(即:project元素default属性设定的target)。
通常,要运行一个程序,首先得要编译它的源码,生成可执行文件,然后才运行这个可执行文件。 可以看到这是由两个任务组成,而且运行可执行文件任务依赖编译源码任务。Ant的buildfile中可以定义多个target,同时一个target的执行可以依赖于另一个target,表描这种依赖关系可以通过target元素的depends属性,depends可以设定多个target(以逗号间隔),如:
depends属性设定的依赖是按左到右的顺序执行,执行命令 Ant run ,会先执行"mkdir"目标,执行完后,再到"complie",最后才执行"run"目标。
<property>元素,主要是设置一些常用的属性,每个属性都会有一个名称(name),以后再做详解。
D:\>Ant
执行时,会先进入到"complie"目标(上面的Ant没有指定target,所以会使用project的default值),编译源码(javac task)
提示:我们可以在ant后面指定想要执行的target,缺省情况下会使用默认的(即:project元素default属性设定的target)。
通常,要运行一个程序,首先得要编译它的源码,生成可执行文件,然后才运行这个可执行文件。 可以看到这是由两个任务组成,而且运行可执行文件任务依赖编译源码任务。Ant的buildfile中可以定义多个target,同时一个target的执行可以依赖于另一个target,表描这种依赖关系可以通过target元素的depends属性,depends可以设定多个target(以逗号间隔),如:
<
target
name
="run"
depends
="mkdir,complie"
>
<!--
运行程序
-->
</ target >
"run"目标依赖"mkdir"和"complie"目标,也就是运行程序之前,要先建立相关文档目录,编译源码生成可执行文件。
<!--
运行程序
-->
</ target >
depends属性设定的依赖是按左到右的顺序执行,执行命令 Ant run ,会先执行"mkdir"目标,执行完后,再到"complie",最后才执行"run"目标。
<property>元素,主要是设置一些常用的属性,每个属性都会有一个名称(name),以后再做详解。
◎Ant的使用 - 常用任务标签(一)
建立一个基本的程序通常有几个常用的任务,像是设置通用属性、创建或删除目录、编译程序、打包、拷贝文件等等。
这些任务,我们都可以在build.xml中编写相应的任务目标[target]
■ 属性设定:<property>
如果一个固定的值(如:目录D:\dev\lib),在多个target中被应用到,这时我们就通过<property>对它设定,应用到它的地方都使用设定的<property>代替,如果日后有发生变化,也只需要改动<property>的设定即可
<
target
name
="defProperty"
description
="设定属性"
>
< property name ="tomcat.home" value ="C:/jakarta-tomcat" />
< property name ="app.home" value ="." />
< property name ="src.home" value ="${app.home}/src" />
< property name ="lib.home" value ="${app.home}/WEB-INF/lib" />
< property name ="classes.home" value ="${app.home}/WEB-INF/classes" />
</ target >
< property name ="tomcat.home" value ="C:/jakarta-tomcat" />
< property name ="app.home" value ="." />
< property name ="src.home" value ="${app.home}/src" />
< property name ="lib.home" value ="${app.home}/WEB-INF/lib" />
< property name ="classes.home" value ="${app.home}/WEB-INF/classes" />
</ target >
每个property都有一个name(名称)和一个value(值),要引用某个property可以使用${property-name},像上面的${app.home}。
这些属性的值也可以在执行的时候指定,如:ant -Dapp.home="d:\dev\book",如果执行时没有指定,那么就会使用value上定义的值。
■ 创建目录:<mkdir>
<
target
name
="createDir"
description
="创建必要的目录"
>
< mkdir dir ="test/classes" >
< mkdir dir ="${DIST.DIR}" />
</ target >
如果父目录不存在,也会被同时创建;如test不存在,会先创建test目录,然后在其下创建classes目录。可以看到我们这里使用了一个属性DIST.DIR代替一个具体的目录。
< mkdir dir ="test/classes" >
< mkdir dir ="${DIST.DIR}" />
</ target >
■ 创建目录和文件:<delete>
<
target
name
="delDirAndFile"
description
="删除目录和文件"
>
<!-- 删除目录 -->
< delete dir ="${classes.dir}" />
<!-- 删除指定的文件 -->
< delete file ="${jar.file}" />
<!-- 删除指定目录的一组文件 -->
< delete >
< fileset dir ="${classes.dir}" includes ="**/*.class" />
</ delete >
<!-- 删除指定目录及子目录,同时也删除它自己 -->
< delete includeEmptyDirs ="true" >
< fileset dir ="build" />
</ delete >
</ target >
<!-- 删除目录 -->
< delete dir ="${classes.dir}" />
<!-- 删除指定的文件 -->
< delete file ="${jar.file}" />
<!-- 删除指定目录的一组文件 -->
< delete >
< fileset dir ="${classes.dir}" includes ="**/*.class" />
</ delete >
<!-- 删除指定目录及子目录,同时也删除它自己 -->
< delete includeEmptyDirs ="true" >
< fileset dir ="build" />
</ delete >
</ target >
■ 拷贝文件和目录:<copy>
<
target
name
="copyFileAndDir"
description
="拷贝文件和目录"
>
<!-- 拷贝单个文件 -->
< copy file ="error.log" tofile ="debug.log" />
<!-- 拷贝单个文件到指定目录 -->
< copy file ="error.log" todir ="${LOG.DIR}" />
<!-- 拷贝多个文件到指定目录 -->
< copy todir ="${LOG.DIR}" >
< fileset dir ="log" >
< include name ="**/*.log" />
< exclude name ="**/error.log" />
</ fileset >
</ copy >
<!-- 同上 -->
<!--
<copy todir="${LOG.DIR}">
<fileset dir="log" excludes="**/*.txt"/>
</copy>
-->
<!-- 拷贝一个目录到另一个目录 -->
< copy todir ="newbin" >
< fileset dir ="bin" />
</ copy >
</ target >
<!-- 拷贝单个文件 -->
< copy file ="error.log" tofile ="debug.log" />
<!-- 拷贝单个文件到指定目录 -->
< copy file ="error.log" todir ="${LOG.DIR}" />
<!-- 拷贝多个文件到指定目录 -->
< copy todir ="${LOG.DIR}" >
< fileset dir ="log" >
< include name ="**/*.log" />
< exclude name ="**/error.log" />
</ fileset >
</ copy >
<!-- 同上 -->
<!--
<copy todir="${LOG.DIR}">
<fileset dir="log" excludes="**/*.txt"/>
</copy>
-->
<!-- 拷贝一个目录到另一个目录 -->
< copy todir ="newbin" >
< fileset dir ="bin" />
</ copy >
</ target >
■ 移动或重命名文件、目录:<move>
<
target
name
="moveFileAndDir"
description
="移动或重命名文件和目录"
>
<!-- 移动或重命名一个文件 -->
< move file ="error.log" tofile ="debug.log" />
<!-- 移动或重命名一个文件到另一个目录下 -->
< move file ="error.log" todir ="new/log" />
<!-- 将目录移到另一个目录下 -->
< move todir ="new/log" >
< fileset dir ="log" />
</ move >
<!-- 一组文件移到另一个目录下 -->
< move todir ="new/log" >
< fileset dir ="log" >
< include name ="**/*.log" />
< exclude name ="**/error.log" />
</ fileset >
</ move >
</ target >
<!-- 移动或重命名一个文件 -->
< move file ="error.log" tofile ="debug.log" />
<!-- 移动或重命名一个文件到另一个目录下 -->
< move file ="error.log" todir ="new/log" />
<!-- 将目录移到另一个目录下 -->
< move todir ="new/log" >
< fileset dir ="log" />
</ move >
<!-- 一组文件移到另一个目录下 -->
< move todir ="new/log" >
< fileset dir ="log" >
< include name ="**/*.log" />
< exclude name ="**/error.log" />
</ fileset >
</ move >
</ target >