项目构建工具之Ant的使用

1.下载 
到 
http://ant.apache.org/bindownload.cgi站点下载Ant最新版 
2.解压 
将下载的文件解压到任意目录,解压缩后看到如下文件结构: 
bin:启动和运行Ant的可执行命令 
docs:Ant工具的相关文档,这些文档对于学习Ant有很大的作用 
etc:包含一些样式单文件,通常无需理会该目录下的文件 
lib:包含Ant的核心类库,以及编译和运行Ant所以来的第三方类库 
LICENSE等说明性文档 
3.配置环境变量 
 在使用Ant之前,请确保已经正确的安装了JDK,  并且正确的配置了%JAVA_HOME%  另外,还需要配置%ANT_HOME%,这个变量指向刚刚解压的文件夹目录,配置的过程和%JAVA_HOME%相同。 
Ant工具的关键命令就是%ANT_HOME%/bin下的ant.bat(linux版为ant.sh)命令,如果希望操作系统可以识别该命令,可以将%ANT_HOME%/bin路径添加到操作系统的PATH环境变量之中。 
配置好以后,可以直接在命令行里面输入ant,如果看到如下内容,则说明Ant安装成功: 

      项目构建工具之Ant的使用
4. Ant常用参数 
ant -find/-s         在上级目录中搜索生成文件,直到达到文件系统的根路径 
ant -file/-f               使用指定的文件名作为项目的生成文件 
ant -logfile/-l       使用指定的文件名作为ant的日志输入文件 
ant -keep-going/-k    执行所有不依赖于出错的target的target 
ant -help         打开ant工具的帮助菜单 
.... 
更多命令详情,请在命令行输入ant -help查看. 
可以在使用Ant命令的时候传入参数:例如: 
ant -Denv=%ANT_HOME%,这里传入了一个叫做env的参数,之后可以在生成文件中通过$env得到这个值,这是windows中的写法, 
在linux系统中,则使用ant -Devn=$ANT_HOME。 
在默认情况下,Ant将运行生成文件里面指定的默认target,如果希望运行Ant时指定需要执行的target,可以使用如下命令格式: 
ant [target [target2 [target3] ...]] 
5. 关于生成文件build.xml 
使用Ant的关键就是编写生成文件,生成文件定义了该项目的各个生成任务(target),并定义生成任务之间的关系。Ant默认的生成文件名为build.xml,也可以使用其他的名字。生成文件可以放在任意的文件夹中,但通常的做法是放在项目的顶层目录中。 
build.xml文件的根元素是<project.../>,一个<project>元素中可以定义多个<target>,每个<target>又可能由一个或多个任务序列组成,当执行某个<target>时,实际上就是一次执行该目标所包含的全部任务,每个任务由一段可执行的代码组成。 
 <project>元素中常见的属性:
    default:指定默认的target,这个属性是必须的,如果运行ant命令时没有显式指定执行的target,将执行这个默认的target 
    basedir:指定项目的基准路径,生成文件中的其他相对路径都是基于该路径的、 
    name:指定项目名,该属性仅仅指定一个名字,对编译和项目的生成没有太大的实际作用 
    description:指定项目的描述性喜,同样对编译和项目的生成没有太大的实际作用 
<target>元素中常见的属性: 
    name:指定该target的名称,该属性是必须的,而且非常重要,这个名称可以被其他的target引用,而且,在一个build.xml文件中,target的名称应该唯一 
    depends:该小户型可以指定一个或多个target名,表示当前target依赖于这些target,执行该target之前应该先执行该depends属性所指定的每一个target。例如:

1
<target name="step3" depends="step1, step2"/>

    if:该属性指定一个属性名,用属性表示仅当设置了该属性时才执行此target。例如:

1
<target name="aaa" if="prop1"/>

    unless:和if相反,该属性指定一个属性名,表示仅当没有设置改属性时才执行此target。例如:

1
<target name="bbb" unless="prop2" />
     description:指定该target的描述信息。 
6. Ant任务分为三类: 
核心任务:指Ant自带的任务 
可选任务:指来自第三方的任务,因此需要一个附件的Jar文件 
用户自定义的任务:指用户自己开发的任务 
7. <project>的子元素之<property>:用于定义一个或多个属性 
Ant生成文件中的属性类似于编程语言中的宏变量,他们都具有属性名和属性值。和编程语言不同的是,生成文件中的值不可改变。定义一个属性的最简单的形式如下:

1
<property name="buildDirectory" value="/home/user/Desktop" />

      如果需要获取该属性值,使用${buildDirectory}访问该变量即可。 
注意:美元符号"$"在Ant生成文件中具有特殊意义,如果希望将它当成普通的字符,应该使用"$",例如:

1
<echo>$${buildDirectory}=${buildDirectory}</echo>

  上面的代码中执行后会输出:[echo] ${buildDirectory}=/home/user/Desktop 
 <property>可以接受如下几个常用的属性: 
 name:指定需要设置的属性名 
    value:指定属性值 
    resource:指定属性文件的资源名称,Ant将负责从属性文件中读取属性名和属性值 
    file:指定属性文件的文件名,Ant将负责从属性文件中读取属性名和属性值 
    url:指定属性文件的URL地址,同样,Ant将负责从属性文件中读取属性名和属性值 
    environment:用于指定系统环境变量的前缀。通过这种方式允许Ant访问系统的环境变量 
    classpath:指定搜索属性文件的文件和路径集 
    classpathref:指定搜索属性文件的文件和路径集引用,该属性并不是直接给出系列文件或路径,而是给定文件和路径集引用 
下面给出几个使用<property>元素的例子: 
<property file="foo.poperties" /> <!-- 读取foo.properties文件中的属性名和值 --> 
<property url="http://localhost:8080/Web/jdbc.properties" /> 
<property>元素所读取的属性文件中,内容由一系列的name=value组成。 
<property environment="env" /> <!-- 定义访问操作系统环境变量的前缀是env --> 
定义了上面的property以后,可以通过以下方式来访问操作系统的环境变量: 
<echo>${env.JAVA_HOME}</echo> 
8. <project>的子元素之<path>和<classpath>:用于定义一个或多个文件和路径 
通常,我们需要使用Ant编译、运行Java文件,这时常常引用到第三方的Jar包,这就需要用到<classpath>元素了。<path>和<classpath>元素都用于定义文件和路径集,区别是,classpath元素通常作为其他任务的子元素,既可以引用已有的文件和目录集,也可以临时定义一个文件和目录集;而<path>元素则作为<project>元素的子元素,用于定义一个独立的、有名称的文件和目录集,用于被引用。 
 <path>和<classpath>都用于手机系列的文件和目录集,都可接受如下的子元素: 
 <pathelement>:用于指定一个或多个目录,可以指定如下两个属性中的一个: 
      path:指定一个或多个目录(或者Jar文件),多个目录或Jar文件直接以英文冒号或英文分号隔开 
      location:指定一个目录和Jar文件(因为Jar文件哈可以包含更多层次的文件结构,所以Jar文件实际上可以看成是一个文件路径) 
    <dirset>:采用模式字符串的方式指定多个目录 
    <fileset>:采用模式字符串的方式指定多个文件 
    <filelist>:采用直接给出系列文件名的方式指定系列文件 
8.1 <pathelement>元素 
如下是一个配置片段:  

1
2
<pathelement path="/path/to/file2.jar:/path/to/class2;/path/to/class3" /><!--注意第一个是文件,后两个是目录 --> 
<pathelement location="lib/somejarfile.jar" />

8.2 <dirset>元素 
如果要指定多个目录,则应该使用<dirset>元素,该元素需要一个dir属性,dir属性指定该目录集的根路径。除此之外,dirset还可以使用<include>和<exclude>两个子元素来指定包含和不包含哪些目录,如下面的配置片段:

1
2
3
4
<dirset dir="build"
   <include name="apps/**/classes" /> <!-- 包含build/apps下的所有目录下的classes下的所有文件 --> 
   <exclude name="apps/**/test" /> <!-- 不包含build/apps下的子目录中带有test下的所有文件 --> 
</dirset>

8.3 <filellist>元素 
<filelist>元素需要指定如下两个属性: 
dir:指定文件集里多个文件所在的基准路径,这是一个必需的属性 
files:多个文件名列表,多个文件名之间用英文逗号或者空格隔开 
如下是一个配置片段:

1
<filelist id="srcFiles" dir="src" files="foo.xml, bar.xml" />

  注意:几乎所有的Ant元素都可以指定两个属性:id和refid,其中id用于为元素指定一个唯一的标识符,而refid用于指定引用另一个元素,例如下面的filelist配置:<filelist refid="srcFiles" />,该filelist元素所包含的文件集和前面的srcFiles包含的文件完全一样。 
实际上,<filelist>还允许使用多个<file>子元素来指定文件列表,如下是一个配置片段:

1
2
3
4
<filelist id="srcFiles" dir="${src.file}"
   <file name="foo.xml"/> 
   <file name="bar.xml"/> 
</filelist>

8.4 <fileset>元素 
<fileset>元素可以指定两个属性: 
dir:指定文件集里多个文件所在的基准路径,这是一个必需的属性 
casesensitive:指定是否徐芬大小写,默认区分大小写 
除此之外,<fileset>元素中还可以使用<include>和<exclude>子元素来指定包含和不包含哪些文件,如下是一个配置片段: 

1
2
3
4
<fileset dir="src" casesensitive="yes"<!-- 指定src路径下的文件集 --> 
   <include name="**/*.java" /> <!-- 包含所有的java文件 --> 
   <exclude name="**/*test*" /> <!-- 排除所有文件名中有test字符串的文件 --> 
</fileset>

  掌握了<pathelement>, <dirset>, <filelist>, <fileset>四个元素的用法之后,我们就可以将他们组合在一起使用了,这样才能更灵活的适用于不同的选择需求。 
9. Ant的任务(task) 
每一个<target>由一个或多个task组成,task是<target>元素的核心。下面介绍一些常用的核心task: 
javac:用于编译一个或多个Java源文件,通常需要srcdir和destdir两个属性,用于指定Java源文件的位置和编译后class文件保存的位置 
java:用于运行某个Java类,通常需要classname属性,用于指定需要运行哪个类 
jar:用于生成jar包,通常需要destfile属性,用于指定所创建jar包的文件名;除此之外,还需要指定一个文件集,用于指定需要将哪些文件打包到jar文件中 
sql:用于执行一条或多条SQL语句,通常需要driver, url, userid和password等属性,还可以通过src属性来指定需要执行的SQLl脚本文件,或者直接使用文本内容的方式指定SQL脚本字符串 
echo:用于输出某个字符串 
exec:执行操作系统的特定命令,通常需要executable属性,用于指定想执行的命令 
copy:用于复制文件或路径 
delete:用于删除文件或路径 
mkdir:用于创建文件夹 
move:用于移动文件或目录 
另外, %ANT_HOME%/docs/manual/CoreTasks路径下包含了Ant所有核心task的详细介绍,%ANT_HOME%/docs/manual/OptionalTask路径下包含了Ant所有可选task的详细介绍,同学们可以参考这些文档来了解各个task所支持的属性和选项以及它们的用法。


上一篇:5分钟记住列表的使用功能-Python基础前传(7)


下一篇:视觉直观感受7种常用的排序算法