您的位置:首页 > 运维架构 > Apache

Apache Ant中任务(Task)的执行原理实例说明

2014-03-26 23:20 281 查看
前言:Ant工具是采用纯Java语言编写的一款自动化构建、编译、部署的工具,与Apache基金组织下的Maven工具类似,只是Maven后来的一些新功能,使得Maven比Ant工具更加优秀。至于Ant工具的安装和配置请查看本人其他相关的文档,在此不再赘述。

注:本章博客的测试系统为windows系统。

一、ANT的安装目录及环境变量的配置:

安装目录:D:\Program Files\apache-ant-1.7.1

环境变量:变量名:ANT_HOME;变量值:D:\Program Files\apache-ant-1.7.1

将ANT_HOME加入PATH即可。

二、ANT工具在DOS命令下执行测试:

A、建立测试用的build.xml文件,该文件放置在F盘下:



我们的目标是在 F 盘下建立一个名叫“testMKDir”的测试目录。

B、在DOS窗口中执行build.xml文件:



我们可以从DOS窗口中看到,执行ANT命令的结果是成功的。那么我们在F盘下是不是成功建立了该脚本呢?去看一下,结果如图:



从图中红色的地方可以看出,我们已经创建文件夹成功了。说明跟前面的执行结果反馈是一致的。

C、将ANT的命令执行转变为Java类执行:

C1:目标:在F盘下创建“testMKDir2”目录名称;

C2:我们打开ANT工具的Java源代码,发现所有的Ant命令的Task定义都在org.apache.tools.ant.taskdefs包;

C3:打开ANT工具的org.apache.tools.ant.taskdefs.Mkdir类,有一个方法叫execute(),其实如果你看得多的话,发现所有的Task都含义这个方法,如图所示:



C4:每个Task都继承于一个基类Task类,下面我们编写一个Java方法,看看能不能实现与ANT命令执行取得一样的结果;



从图中的控制台,我们可以知道,程序为我们在F盘下创建了一个名叫“F://testMKDir2”的目录。去F盘看一下,如图所示:



从图中看出,确实给我们创建了一个名叫“F://testMKDir2”的文件夹。

Java创建执行和我们执行Ant命令得到的结果是一致的,达到我们预测的效果。

D、推测build.xml执行过程如下:

以解析<mkdir dir = "F://testMKDir" />为例:

1、解析到了mkdir任务,应该就是执行对应的Java类:org.apache.tools.ant.taskdefs.Mkdir;

2、通过反射创建org.apache.tools.ant.taskdefs.Mkdir对象;

3、获取其属性比如File(该属性你可以在Ant的源码中找到);

4、根据属性设置方法setDir(File dir)(该方法你可以在Ant的源码中找到);

5、最后用其父类调用execute()方法(该方法你可以在Ant的源码中找到);

那么有什么根据说明执行mkdir任务的时候就是执行的Mkdir类呢?按照常理来讲,是否是应该有一个相应的映射关系呢?类似

mkdir = org.apache.tools.ant.taskdefs.Mkdir;

delete = org.apache.tools.ant.taskdefs.Delete;

这样的关系到底存不存在,我们来看ant.jar包下的org.apache.tools.ant.taskdefs下的defaults.properties属性文件,如图所示:



这张图片是为了证明我们上面的推测截取的一部分映射关系代码,说明我猜测的没有问题,但是我们怎么来证明在执行ANT的Task过程中调用了这种映射关系呢?我们可以采取下面的方式,即第 E 步骤:

E、验证我们在第 D 步骤的推测是否正确:

E1:采用解压缩工具并将defaults.properties文件中的mkdir=org.apache.tools.ant.taskdefs.Mkdir修改成mkdir1=org.apache.tools.ant.taskdefs.Mkdir;

E2:在DOS命令窗口利用ANT命令重新执行build.xml文件,结果如图;



从图中我们可以知道,我们执行失败了,原因是“Cause: The name is undefined.”,意思是我们执行的build.xml中的Task任务名称没有定义,说明在执行的过程中,已经找不到所谓的映射关系“mkdir=org.apache.tools.ant.taskdefs.Mkdir”了。

E3:我们将build.xml文件中<mkdirdir="F://testMKDir"/>标签替换成<mkdir1dir="F://testMKDir"/>;

E4:在DOS命令窗口利用ANT命令重新执行build.xml文件,结果如图;



从图中可以看出,我们执行的ANT命令时成功的,同时我们在 F 盘下面也看到了我们的新建目录。

E5:整个 E 步骤验证了我们执行的ANT命令时,依赖相应的映射关系的推测是正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: