Ant介绍
1,什么是ant
ant是构建工具 2,什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3,ant的好处 跨平台 --因为ant是使用java实现的,所以它跨平台 使用简单--与ant的兄弟make比起来 语法清晰--同样是和make相比 功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发一些ant插件的时候,你会发现它更多的功能。 4,ant的兄弟make
ant做的很多事情,大部分是曾经有一个叫make的所做的,不过对象不同,make更多应用于c/c++ ,ant更多应用于Java。当然这不是一定的,但大部分人如此。 下边开始一步步的带你走进ant的世界
ant 安装
http://www.blogjava.net/dreamstone 1/21
http://www.blogjava.net/dreamstone 2/21
1、到http://ant.apache.org/bindownload.cgi下載Ant,我使用的版本是1.70
解压缩下载文件到你的工作目录,这里以d:\\ant_home为例 2,如图新增系统变量
新增系统变量:ANT_HOME,内容:d:\\ant_home\\apache-ant-1.70
在PATH环境变量中加入Ant的bin目錄:%ANT_HOME%\\bin
如果要让Ant能支持JUnit,需要直接將JUnit的junit.jar放置在Ant的lib目錄,并记得改变CLASSPATH中原先有关于JUnit的设定,例如:%ANT_HOME\\lib\\junit.jar,虽然也有其它的方式可以設定,但這是最快最簡單的方法。
如果是Windows 2000/XP,请在[系统内容/高级/环境变量]中设置[系统变量],以完成以上的设定,例如:
3、测试安装
CMD进入命令行界面,运行Ant 出现如下提示,说明安装成功 E:\\srcgen\\webwork>ant
Buildfile: build.xml does not exist! Build failed
二、第一个ant脚本
http://www.blogjava.net/dreamstone 2/21
http://www.blogjava.net/dreamstone 3/21
使用ant来达成目的,完成一件事情的实例 1、目的:
z 编写一个程序 z 编译它们
z 把它打包成jar包
z 把他们放在应该放置的地方 z 运行它们
我们用文本编辑器编写一个HelloWorld如下
这里为了简单起见只写一个程序,就是HelloWorld.java程序代码如下: package test.ant;
public class HelloWorld{ public static void main(String[] args){ System.out.println(\"Hello world1\"); } };
2,然后用ant完成剩下的步骤。 建立一个build.xml文件,内容如下
解释上边的配置文件
http://www.blogjava.net/dreamstone 3/21
http://www.blogjava.net/dreamstone 4/21
build.xml中的第一句话,没有实际的意义,指定一下encoding,几乎所有的xml的第一行
ant的所有内容必须包含在这个里边,name是你给它取的名字,basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的事情。
类似程序中的变量,为什么这么做想一下变量的作用 把你想做的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,在执行这个target 例如这里的compile之前ant会先检查init是否曾经被执行过,如果执行过则直接直接执行compile,如果没有则会先执行它依赖的target例如这里的init,然后在执行这个target 如我们的计划 编译: 做jar包: 为了不用拷贝,我们可以在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了 新建文件夹: 为了更多一点的功能体现,又加入了两个target 删除生成的文件 http://www.blogjava.net/dreamstone 4/21 http://www.blogjava.net/dreamstone 5/21 再次运行,这里显示了如何在一个target里边调用其他的target 好了,解释完成了,下边检验一下你的ant吧 新建一个src的文件夹,然后把HelloWorld.java按照包目录放进去 做好build.xml文件 在命令行下键入ant ,你会发现一个个任务都完成了。每次更改完代码只需要再次键入ant 有的时候我们可能并不想运行程序,只想执行这些步骤中的某一两个步骤,例如我只想重新部署而不想运行,键入 ant build ant中的每一个任务都可以这样调用ant + target name 好了,这样一个简单的ant任务完成了。 整合ant http://www.blogjava.net/dreamstone 5/21 http://www.blogjava.net/dreamstone 6/21 进一步学习一个稍微复杂一点点的ant 在实际的工作过程中可能会出现以下一些情况,一个项目分成很多个模块,每个小组或者部门负责一个模块,为了测试,他们自己写了一个build.xml,而你负责把这些模块组合到一起使用,写一个build.xml 这个时候你有两种选择: 1,自己重新写一个build.xml ,这将是一个麻烦的事情 2,尽量利用他们已经写好的build.xml,减少自己的工作 举个例子: 假设你下边有三个小组,每个小组负责一个部分,他们分别有一个src 和一个写好的build.xml 这个时候你拿到他们的src,你需要做的是建立三个文件夹src1 ,src2, src3分别把他们的src和build.xml放进去,然后写一个build.xml http://www.blogjava.net/dreamstone 6/21 http://www.blogjava.net/dreamstone 7/21 ok你的任务完成了。 Ant进阶 http://www.blogjava.net/dreamstone 7/21 http://www.blogjava.net/dreamstone 8/21 上边你完成了任务,但是你是否有些感触呢,在那些build.xml中,大多数是重复的,而且更改一次目录需要更改不少东西。是否能让工作做的更好一点呢,答案是肯定的。 引入两个东西: 1,propery 2,xml include 这两个东西都有一个功能,就是能把build.xml中 propery的特点是维护简单,只需要简单的键值对,因为并不是所有人都喜欢xml的格式 xml include的特点是不单可以提取出属性来,连target也可以。 还是以前的例子: 例如我们想把src1 src2 src3这三个属性从xml中提出来,可以新建一个文件叫all.properties 里边的内容 src1=D:\\\\study\\\\ant\\\\src1 src2=D:\\\\study\\\\ant\\\\src2 src3=D:\\\\study\\\\ant\\\\src3 然后你的build.xml文件可以这样写,别人只需要更改配置文件,而不许要更改你的build.xml文件了 http://www.blogjava.net/dreamstone 8/21 http://www.blogjava.net/dreamstone 9/21 如果你自己看的话你会看到这样一个target 有的时候你想给每个小组的build.xml加入几个target,一种做法是每个里边写,然后在这里调用 但是有一种更好的方法。 你可以写一个include.xml文件,内容如下 然后更改你三个小组的build.xml文件,每个里边加入如下内容 ]> &share-variable; 变成如下的样子 这个时候,你只要在include.xml添加propery , 添加target,三个build.xml会同时添加这些propery和target 而且不会让三个组的build.xml变得更复杂。 http://www.blogjava.net/dreamstone 9/21 http://www.blogjava.net/dreamstone 10/21 ]> Ant常用task http://www.blogjava.net/dreamstone 10/21 http://www.blogjava.net/dreamstone 11/21 好了,看完上边的内容,你应该知道怎么构建一个ant的骨架,但具体做起来才才发现很多东西不知道该如何写。下边介绍一下常用的ant task。在ant手册中跟这些叫core task 这里打乱一下顺序,不按照文档中的顺序来介绍,而是按照需求来介绍。 使用classpath 设置classpath 输出信息 http://www.blogjava.net/dreamstone 11/21 http://www.blogjava.net/dreamstone 12/21 拷贝一个文件集合到一个目录 拷贝一个文件集合到一个目录,同时建立备份文件 拷贝一个集合的文件到一个目录,并替换掉@ TITLE @ 拷贝一个目录下的东西到另一个目录下,includes加入,excludes排除 执行程序 打jar包 http://www.blogjava.net/dreamstone 12/21 http://www.blogjava.net/dreamstone 13/21 运行jar包: 或者设置一下运行的jvm的最大内存,来运行 failonerror=\"true\" maxmemory=\"128m\" > 编译程序 制作Javadoc http://www.blogjava.net/dreamstone 13/21 http://www.blogjava.net/dreamstone 14/21 定义一个新的task类库 运行sql into table some_table values(1,2,3,4); truncate table some_other_table; 解压缩 压缩 还有很多,可以参考ant 手册的ant core task http://www.blogjava.net/dreamstone 14/21 http://www.blogjava.net/dreamstone 15/21 打war包: 在ant中控制流程(if else ) http://www.blogjava.net/dreamstone 15/21 http://www.blogjava.net/dreamstone 16/21 实例分析: 从开源框架中拿出一部分来分析一下: 我接触的一些开源程序的ant中,appfuse是比较复杂的,Jpetstore是最简单的。 这里拿一个最简单的出来,然后一路注释过去。(想挑战一下的去看appfuse的。) http://www.blogjava.net/dreamstone 16/21 http://www.blogjava.net/dreamstone 17/21 http://www.blogjava.net/dreamstone 17/21 http://www.blogjava.net/dreamstone 18/21