一、什么是Ant
以下介绍来自百度百科:
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。
我们在使用Eclipse开发Android应用时,Eclipse使用的项目构建工具就是Ant。
用户群:大多数的Java设计都被用于管理大量信息流,例如纽约州就使用Apache Ant去管理美国最大的青年计划,每天可以实时更新超过25万学生的记录。
只要使用过Linux系统的读者,应该知道 make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。最初Ant开发者在开发跨平台的应用时,同样也 是基于这些缺陷对Ant做了更好的设计。
只要使用过Linux系统的读者,应该知道 make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。最初Ant开发者在开发跨平台的应用时,同样也 是基于这些缺陷对Ant做了更好的设计。
二、Ant的优点
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点:
跨平台性。Ant是纯Java语言编写的,所以具有很好的跨平台性。
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件 是XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环 境中去。
三、Ant的基本使用方法
下面介绍Ant的基本使用方法:
1、首先需要从官网下载apache ant,地址为:
http://ant.apache.org/bindownload.cgi
2、下载后的压缩文件直接解压后放到硬盘的目录下就行,然后是配置Ant的环境变量,因为我们需要在命令行下使用ant命令,所以需要将ant的目录加入path环境变量中,步骤如下(windows10系统):
(1)鼠标右击桌面“此电脑”,选择属性,然后在出现的窗口左侧选择“高级系统设置”,在弹出的窗口中选择“环境变量”
(2)在环境变量配置窗口中的“用户变量”中新增一个变量名为ANT_HOME,值为Ant解压后的目录,如下图所示:
然后在“用户变量”下找PATH变量,如果没有就新增一个PATH变量,如果有就直接在PATH变量中加入新的值,值为“%ANT_HOME%\bin”
经过上面2步就配置好了Ant的环境变量了,cmd中执行ant -version命令后,如下图所示则表示配置成功:
3、开始使用Ant。
Ant的核心就是配置文件build.xml,在build.xml文件中配置相关的任务后,使用ant命令即可自动执行,所以我们需要掌握ant的相关配置,这里先在桌面新建一个目录TestAnt,然后进入该目录,新建一个build.xml文件,并加入如下内容:
下面就来解释上面的build.xml文件的配置:
(1)build.xml需要遵循一定的格式,这样ant命令才能正确执行,一个build.xml文件是以<project>标签为根节点的,<project>节点中可以指定name属性,表示项目的名称,basedir代表项目的根目录,default表示项目的默认任务名,这里的default属性值为test,则执行ant命令时会找default对应的target去执行(如果ant命令没有指定任务名的话)。
(2)<project>标签中定义了一个<target>标签,该标签表示的就是一个任务,<target>标签中的name属性表示任务名,我们可以在命令行下直接使用ant + 任务名来执行某个特定的任务,例如上面的例子中,我们可以使用ant test命令去执行name值为test的target任务,由于我们在<project>标签中配置了default属性为test,所以在命令行下只需要执行ant命令就可以运行test任务了。
(3)<echo>标签表示在命令行下输出,类似于java中的System.out.println(),在<echo>标签中配置message属性后即可在命令行下打印该属性的值。如上图中显示的[echo],即为我们配置的message属性的值。
(4)使用${}可以获取某个变量的值,花括号中为变量名,如上图中打印出的C:\Users\yubo7\Desktop\TestAnt,即为basedir的值,由于在<project>标签中我们给basedir属性的值为空,所以basedir的值默认为build.xml所在的路径。
上面的例子是一个最基本的build.xml文件的结构,build.xml文件还有很多配置项,下面举例几个配置项:
<property>标签,用于声明键值对:
<property>标签用于声明一个属性,其中name为属性名,value为属性值,访问属性值时使用${属性名}。
<copty>标签,用于文件拷贝:
<copy>标签表示文件或文件夹的拷贝,上面的配置中,file属性表示要拷贝的文件路径,tofile属性表示要拷贝的目的文件路径。如果待拷贝的文件不存在,则命令执行会失败,如果目的文件路径不存在,则命令执行时会自动创建目录。如果是要拷贝整个目录,需要下面的配置:
和单个文件的拷贝类似,如果待拷贝的目录不存在,则命令执行会失败,如果目的路径不存在,则命令执行时会自动创建目录。
<delete>标签,用于文件或文件夹的删除:
执行ant test-del-file和ant test-del-dir命令后,结果如下图所示:
执行ant test-del-file和ant test-del-dir命令后,结果如下图所示:
<mkdir>标签,用于目录的创建:
执行成功后在项目的目录下出现了test目录。
上面的几种是ant操作文件的基本用法,但是ant的用法不仅仅只有这么简单而已,ant还可以编译java文件,用法如下:
<javac>标签,用于将.java文件编译成.class文件:
第一次执行ant test-compile命令时,由于destdir目录不存在,所以编译不成功,在创建了build/classes/目录后再次执行ant test-compile,命令执行成功,并且在build/classes/目录下出现了Test.class文件。
ant能编译java文件,自然也能运行java程序,用法如下:
<java>标签,用于执行.class文件:
执行ant test-run-java命令后,结果如下图:
可以看到控制台中打印了HelloWorld!,和我们在代码中打印的一样,证明这里执行了java代码。
<jar>标签,用于将java程序打包成jar文件:
任务依赖:
使用ant执行任务时,我们肯定不会是一个个的执行,有时候会通过一次命令执行多个任务,比如下面的过程:
新建目录->移动文件到该目录->删除原来的文件
这个过程其实是3个独立的任务,为了一次执行这3个任务,需要用到<target>标签中的depends属性,首先上代码: