自动构建工具Ant的使用(三)

来源:互联网 发布:淘宝达人简介 编辑:程序博客网 时间:2024/05/21 06:32

       这篇博客参考了很多的资料,其中的那个结构图是我照着书上图画的,感觉还不错,只是那些箭头做着很麻烦,想了半天,还是用word里的箭头,做的,之后又截了图,这才好。这篇博客没有什么东西,只是简单的介绍一下Ant的结构。

Ant中最重要的就是它的构建文件了,所有的工作都是在该文件中进行的。

通过这个build.xml的文件可以完成一系列的工作,一个build.xml文件通常由三部分组成:项目(project)、目标(target)、和任务(javac)。但也有一些其他的元素。如<property>,<path>等。这些结构描述了当Ant启动以后要完成的工作。当构建文件只描述一个项目的时候,他们是垂直的关系,在一个项目中可以包含一个或多个目标,一个目标当中又可以包含多个一个或多个任务。他们的关系如图所示:

一、项目(project):

Ant中,一个项目是为了完成一个创建过程需要执行的一系列的操作组成的。项目是可以任意的长度,它将要完成的操作按逻辑分组。一个build.xml文件可以只包含一个项目,在项目的下边通常有目标(target)和属性(property),目标定义了每个功能模块,属性定义了某个字符串所指向的真实的含义,这里说属性并不是project这个标签的属性,而是作为project的子元素的   <property/>这个表示定义属性的标签。既然项目project也是标签,那么它一定会有属性,对于project来说可以有多个属性,project元素的常见属性及含义如下:
default:该属性用来指定默认要执行的target,这个属性是必须的,如果运行ant命令的时候,没有显示的指定要运行哪一个target的化,Ant将按照projectdefault属性所定义的target执行。

basedir:该属性用来指定项目的基准路径,在项目中所生成的路径都是基于该路径的,通常设置为“.”,即当前的目录。

name:该属性用来指定一个项目名,这个属性仅仅是给项目起了一个名字而已,对编译、生成项目并没有太大的实际作用。

description:该属性用来指定项目的描述信息,或者可以理解为它是一种注释的信息,对编译、生成项目也没有太大实际作用。

一个的build.xml文件,只有项目的如下所示:

<?xml version="1.0" encoding="UTF-8"?><project name="FirstAnt" escription="这是一个没有目标的项目" basedir="."  default="tatget1"></project>

二、目标(target):

Ant中,目标是由一些列的任务组成的具有某种特殊的含义组成的集合。在<project>元素下可以包含多个目标<target>,由不同的目标去执行不同的任务,比如说可以在项目定义一个可以编译的目标,定义一个打包的目标,在定义一个执行的目标,这样就可以很轻松的完成构建的工作了。当我们在一个project下定义了多个目标的时候,我们就想要去执行编译的目标,其他的目标都不去执行,该怎么办呢,这就用需要在运行的时候在ant的后面直接输入要执行的目标名。对于target来说它通常也有五个属性,其含义如下:

name:该属性的含义是指定target的名字,这个属性在target中是必须要存在的,当运行Ant的时候,是根据项目的default属性中定义的target的名字,默认的去执行相应的target。由此可见一个项目中不可以含有同名的target

depends:该属性的含义是可以指定一个或多个target名,表示该target的运行要取决于depends中所定义的target,只有depends中定义的target都执行完毕之后,才可以运行,这个属性是非常的有用,默认的项目只能默认的去执行一个target,如果想要达到先编译,在运行的顺序执行的效果,那么只要在运行的目标中加上该属性,让他的值是编译的那个目标的值,那么默认首先执行该运行的target的时候,必须先去执行depends中定义的编译的target

if:该属性的含义是指定一个属性名,用属性表示了仅当设置了该属性时才执行此target

unless:该属性的含义是指定一个属性名,用属性表示了仅当没有设置改属性时才执行此target

description:该属性的含义是指定该target的描述信息,但是不知道为什么我在project里面写上了该属性出现了错误,说什么不期待的属性,不明白,所以我就去掉了该属性。

添加了目标的build.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?><project name="FirstAnt"  basedir="."  default="run">     <target name="compile" description="这是一个编译的目标">      </target>      <target name="run" depends="compile" description="这是一个运行的目标">      </target></project>

三、任务(task):

Ant中,一个项目可以包含多个目标,一个目标可以包含多个任务,而这些任务构成了Ant的目标。任务是Ant可以执行预先定义的操作,而实际执行任务的是一个Java类,只不过是将该Java类封装成了标签。Ant包括2大类任务:核心任务和可选任务。核心任务包括大多数创建和配置过程常用的基本操作。包括<mkdir>,<delete>等,而可选任务则更加的专业化,包含了向<cvs>,<ftp>这样的任务。对于Ant来说,当有些任务满足不了我们的需要时,可以建立自己的任务并将它嵌入到创建过程中,对于Ant的输出是很简单的,如果我们想要输出一句话,可以使用<echo>标签,它是Ant的核心任务之一,可以向文件或者是标准输出设备写入语句。输出某个字符串,通常用于输出某些提示信息。

添加了<echo>任务的build.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?><project name="FirstAnt"  basedir="."  default="run">     <target name="compile" description="这是一个编译的目标">           <echo>这是编译目标里的echo的信息,会先输出</echo>      </target>      <target name="run" depends="compile" description="这是一个运行的目标">           <echo>这是运行目标里的echo的信息,会后输出</echo>      </target></project>

对于echo标签来说,输出的信息可以作为echo标签中包含的文本进行输出,也可以做为message属性值进行输出。

:<echo message=”属性的信息”/>

具体使用哪个还得看实际的情况。接下便要执行这个简单的Ant,切换到该build.xml文件所在的目录,输入ant命令,看到结果如下所示:

四、属性(property):

Ant中,project元素还有<property>这个子元素,该元素的含义是定义一个属性,以便于在后边的使用中去引用它,这样可以解决硬编码的问题。我们可以定义多个属性,这些生成的属性和Java中的String类型很相似,如:

String name = "这是一个名字";

<property name="name" value="这是一个名字"/>

这两个的含义基本上是一样的。如果想要去获取这个属性值的化,在Java中是很简单的,在Ant中同样很简单,只要使用${propertyName}的形式便可获取属性值,这有点类似于JSP中的EL表达式,如下所示:

<echo>${name}<echo>

这样在执行的时候便会输出“这是一个名字”的字符串了。

对于Antproperty标签来说,通常它有如下几个属性:
name:该属性的含义是指定需要设置的属性名。

value:该属性的含义是指定需要设置的属性值。

resource:该属性的含义是指定属性文件的资源名称,Ant将负责从属性文件中读取属性名和属性值。

file:该属性的含义是指定属性文件的文件名,Ant将负责从属性文件中读取属性名和属性值。

url:该属性的含义是指定属性文件的URL地址,Ant将负责从属性文件汇总读取属性名和属性值。
environment:用于指定系统环境变量的前缀。通过这种方式允许Ant访问系统环境变量。
classpath:该属性的含义是指定搜索文件的文件和路径集。

classpathref:该属性的含义是指定搜索属性文件的文件和路径集引用,该属性并不是直接给出系列文件或路径,而是给定文件和路径集引用。

对于<property>来说用的更多的是用它来定义一个名代表一个文件夹,一个文件等。总之就是为了后面可以很方便的去引用该属性。

五、路径(path):

Ant中,path元素也是project的一部分,通常用它来定义一个独立的有名称的文件和目录集,和它比较相似的就是<classpath>元素了,只不过它通常作为其他任务的子元素。通常它有如下几个子元素:
pathelement:该子元素的含义是用于指定一个或多个目录。有pathlocation两个属性。Path可以指定多个,location可以指定一个。

direst:该子元素的含义采用模式字符串的方式指定系列目录。

fileset:该子元素的含义是采用模式字符串的方式指定系列文件。

filelist:该子元素的含义是采用直接列出系列文件名的方式指定系列文件。

这篇博客到此结束了,过两天就写Ant中的那些任务标签的使用方法了,如果写的不好,有错误,还是希望提出来。

最后祝大家中秋快乐!国庆快乐!

原创粉丝点击