使用Ant工具
只要输入 ant 或 ant.bat 即可,若是运行ant命令时没有指定任何参数,Ant会在当下目录搜索 build.xml 文件,若是找到了就以该文件为生成文件,并执行默认的target。运行时使用 -find 或 -s ,Ant就会到上级目录搜索生成的文件,直至到达文件系统的跟路径。
若要Ant使用其它生成文件,可以使用 -buildfile <生成文件> 选项,其中 -buildfile 也可以使用 -file 或 -f 来代替,这三个命令的作用完全一样。
比如 ant -file a.xml 显示指定 a作为生成文件。
若是希望 Ant 运行时只输出少量必要信息,则可使用 -quiet 或 -q 选项,若是希望ant运行时提供更多信息,则使用 -verbose -v
此外,ant 还允许指定一些属性来覆盖生成文件中指定的属性值,比如 ant -Dbook=ssh 此命令会覆盖 book 属性值
ant -Dpath=%ANT_HOME% 通过此方法,可以将操作系统中的环境变量传入生成文件。 若是想要访问到该环境变量的值,使用 $path 即可
默认情况下,Ant 将执行生成文件中默认的target,若是要指定target,则 ant [target [target1 [target2 ...] ] ] 。
定义生成文件
通常放在项目的跟路径下,通常文件名为 build.xml ,否则使用 ant 时,要指定生成文件的文件名。生成文件的根元素是<project ...> 每个项目下可以定义多个生成目标,每个生成目标以一个<target/>元素来定义。
<target/> 含有以下属性:
name:指定 target 的名称,此属性必须,当运行指定的target,则只需指定target。
depends:该属性指定一个或多个target名,表示运行该target之前应该先运行该depends属性所指定的一个或多个target。if:该属性指定一个属性名,用属性表示仅当设置了该属性时才执行此 target。
unless : 该属性指定一个属性名,用属性表示仅当没有设置该属性时才执行此 target。
description:指定该target的描述信息。每个生成目标又可能由一个或者多个任务序列组成,当执行某个生成目标时,实际上就是依次完成该目标所包含的全部任务。
每一个任务由一段可以执行的代码构成。
定义任务的代码格式如下:
<name attribute1="value1" attribute2="value2" ... />
其中name是任务的名称,attributeN 和 valueN 表示执行该任务所需的属性名和属性值。
概括讲:一个<project></project>下有多个<target> 每个<target>下有多个任务。
任务有三种类型:1.核心任务(Ant自带的任务) 2.可选任务(添加了一些jar,然后便多了些任务)3.用户自定义任务(程序员开发的,希望被ant执行的任务)
除此之外,<property.../>元素用于定义一个或多个属性,这里的属性是固定的,值不会改变。
若要获取属性值,则 ${属性名} 若是希望Ant 将生成文件中的$当成普通文本,则使用$$。如$${pro}表示字符串${pro}
<property.../>元素可以接受如下几个常用属性:
name:指定需要设置的属性名
value:指定需要设置的属性值
resource:指定属性文件的资源名称,Ant从属性文件中读取属性和属性值。
file:指定属性文件的文件名,ant从属性文件中读取属性和属性值。
url:指定属性文件的url地址,Ant将负责从属性文件中读取属性名和属性值。
environment:用于指定系统环境变量的前缀,以这种方式可以访问到系统的环境变量。
比如说:
<property file="foo.properties"/> 指定读取 foo.properties 文件中的属性名和属性值。
<property url="http://www.crazyit.org/props/foo.properties"/> 指定读取某个url对应的文件中的属性值与属性名。
<property environment="env"/> 定义访问操作系统环境变量的前缀是env
定义了上述元素,则可以这样访问环境变量的值,<echo>${env.JAVA_HOME}</echo>
path元素和classpath元素
使用Ant编译,运行java程序时常常需要引用第三方jar包,这就需要 <classpath.../> 元素了。
<path.../>元素作为<project.../>元素的子元素,一般用于定义一个路径集,一般被引用。
<path.../>和<classpath.../>用于收集系列的文件和文件集,这两个元素都可以接受如下子元素。
<filelist.../>:采用直接列出文件名指定一些相关文件。
<fileset.../>采用模式字符串的方式指定一些相关文件。
<dirset.../>采用模式字符串的方式指定一些相关目录。
<pathelement.../>用于指定一个或多个目录,此元素可以指定如下两个属性中的一个:
1)<path.../>:指定一个或多个目录(jar文件也可以),多个文件使用":"或“;”作为分隔符
2)<location.../>:指定一个目录或者jar文件。
比如:定义/path/to/file2.jar /path/to/class2 和 /path/to/class3所组成的路径集。
<pathelement path="/path/to/file2.jar ; /path/to/class2 ;/path/to/class3 "/>
定义由单个文件 lib/helper.jar 构成的目录。
<pathelement location="lib/helper.jar" />
如果指定多个路径集,则应该使用<dirset.../>,该元素需要一个dir属性,dir属性指定该路径的根路径。同时还可以指定<include.../> 和<exclude.../>两个子元素来指定包含和不包含哪些目录。
<dirset dir="build">
<include name="apps/**/classes"/> <!-- 指定apps目录下所有classes目录 -->
<exclude name="apps/**/*Test*"/> <!-- 去除apps目录下所有名称中含有Test字样的目录 -->
</direct>
若是希望配置多个文件,则可以使用<fileset.../> 或者 <filelist.../>元素,通常使用<fileset.../>模式字符串来匹配文件集,而<filelist.../>通过列出文件名来指定文件集。
<filelist.../>元素需要指定如下两个属性。
dir:指定文件集所在的基准路径。
files:多个文件名列表,多个文件名之间以"," 或者空格 分隔开。
比如:配置 src/foo.xml 和 src/bar.xml组成的文件集
<filelist id="docFiles" dir="src" files="foo.xml , bar.xml" />
几乎所有的Ant元素都可以指定id 和refid 属性,其中id为元素指定一个唯一的标识,而refid 用于指定引用另一个元素。
例如:<filelist refid="docFiles"/> 此元素包含id=docFiles元素所包含元素的全部元素。
此标签还允许指定多个<file.../>子元素来指定文件列表。
<filelist id="filelist1" dir="src">
<file name="foo.xml"/>
<file name="bar.xml"/>
</filelist>
<fileset.../>元素可指定如下两个属性:
dir:基准路径,casesensitive :指定是否区分大小写。默认区分大小写。
除此之外,<fileset>还可以使用include和exclude两个子元素来指定包含和不包含哪些文件,例如下面的配置片段:
包含所有 .java 文件,排除所有的文件名中含有Test子串的文件。
<fileset dir="src" casesensitive="yes">
<include name="**/*.java"/>
<exclude name="**/*Test*"/>
</fileset>
Ant的任务
每一个target都由多个task组成。
Ant提供了大量核心的task和可选task,还有程序员可以自定义task,扩展了task的功能。
核心task:
javac,java,sql(用于执行一条或多条sql语句,需要driver url userid 和 password等属性,表示驱动类,数据库url,用户名和密码,还可以使用src指定所需要的sql脚本文件,或者直接使用文本内容的方式指定sql脚本字符串),echo(输出某个字符串),exec(执行操作系统的特定命令,通常需要executable属性,用于指定想执行的命令)
F:\Ant-1.9.4\apache-ant-1.9.4\manual\Tasks目录下有详细的task的介绍。