利用Ant实现项目自动构建测试备份并发布到项目web(1)
Ant是一个非常好的java编译工具。作者说这个东西是不带make缺陷的make工具(linux/unix用户对make/makefile应该是很熟悉了吧),这里我们来具体实践一下使用Ant进行项目构建管理。
文章开始,我也没有免了俗套,先简要的介绍一下Ant。Ant是一个java的基本构建工具(我这里使用构建这个词,是因为我觉得对于Ant来讲,编译只是其中很小的一部分)。Ant是使用java开发的,但不仅仅是一个只适用于java工具,也可以为其他语言提供相映的功能,就像其他的make工具一样。而且由于java是跨平台的,所以ant也是可以跨平台使用的,真正的实现了java的一次编写到处运行的。当前Ant已经推出了1.54版了,这个版本需要jdk1.1以上版本的支持。不过我没有具体试验过,一来jdk1.1找起来很不容易,二来也没有人会用这个低版本的jdk进行开发了,尤其在中国。
Ant需要用户自己编写一个build脚本来对项目进行管理。这个脚本是xml格式的文档(近来非常流行使用xml文档,至少我看到的apache.org上的java项目的配置文件都是xml格式了,看来我们也的与时俱进呀)。使用任何一种你喜欢的编辑器都可以编写这样的build脚本,如果你愿意当然可以使用windows自带的记事本来写,没有人会反对。我在这里使用的是eclipse。选择他的缘故是因为eclipse自身已经集成了Ant 1.5.3版本(作为eclipse的一个插件),可以很方便的使用,而且集成了Ant的编辑器,可以做到代码提示,最重要的原因是我的项目是用eclipse来开发的,所以eclipse是不二的选择。
在eclpise中是不需要配置Ant的如果你是在其他的环境中使用Ant那么需要配置相应的path和classpath,将你的ant_home下的lib文件夹加入classpath中,这里包含了ant的基本类包。将ant_home下的bin文件夹加入你的path中,这样就可以在windows终端窗口使用ant工具了。
Ant的执行是Ant [脚本文件]这种格式,如果没有指明脚本文件,那么ant会在当前文件夹下寻找build.xml文件作为当前的脚本文件,如果连这个也找不到就只好报错了。
当然在eclipse中是不用这么麻烦的。只要在eclipse中运行扩展工具里的run as中的ant build就可以了。Ant会自动去寻找当前项目文件夹中的build.xml的。并且以后就可以直接使用了。
基本知识介绍完毕,开始进入正题:Ant的build.xml的编写。下面以我的InterfacePackage项目的开发来进行build.xml的解说。
首先大家要记住build.xml是xml文档(好像是废话,因为文件的扩展名已经告诉我们答案了),所以所编写的build.xml必须遵守xml文档的规范,否则ant会毫不留情的报错(计算机就是这样,一点也不给人留面子,每次报错都是直截了当冷酷无情的)。
<!--这是申明,说明这确实是一个xml文档-- >
<?xml version="1.0" encoding="UTF-8" ?>
<!—这里说明了我的项目的文件名,default指定的是默认的task-- >
<project name="ConsoleViewer" default="dest">
这里我们基础到了几个ant的基本概念,就是每一个脚本都是由project段内的一些内容为主体的,通过project标签我们可以指定项目名,和默认的task。Task是ant中的一个最重要的概念,ant通过执行脚本中的一系列task来完成工作,所以task是可以说是ant的灵魂。
<property name="project.version.info" value="1.1.0" />
<property name="project.name.info" value="InterfacePackage" />
<property name="project.package.type.info" value="jar" />
<property name="project.encoding.info" value="UTF-8" />
<property name="base.dir" value="." />
<property name="src.dir" value="${base.dir}/src" />
<property name="bin.dir" value="${base.dir}/bin" />
<property name="dest.dir" value="${base.dir}/dest" />
<property name="doc.dir" value="${base.dir}/doc" />
<property name="code.dir" value="${base.dir}/code" />
<property name="lib.dir" value="${base.dir}/lib" />
<property name="bak.dir" value="${base.dir}/bak"/>
<property name="juit.report.dir" value="${base.dir}/JUnitReport" />
<property name="web.dir" value="E:/env/deploy/html/ibeyond/${project.name.info}" />
<property name="web.doc.dir" value="${web.dir}/doc" />
<property name="web.code.dir" value="${web.dir}/code" />
<property name="web.src.dir" value="${web.dir}/src" />
<property name="web.src.dir" value="${web.dir}/bin" />
<property name="web.old.dir" value="${web.dir}/old" />
<property name="web.bin.dir" value="${web.dir}/bin" />
<property name="web.report.dir" value="${web.dir}/test/report"/>
以上这些是我定义的一些property。何谓property呢?就是ant脚本的一些属性,而task就是ant脚本的方法,通过属性和方法的结合完成对象所能完成的工作,看来ant也是面向对象的。以上property我不需解释大家也肯定应该能看的懂吧.其中带info后缀的是指信息,带dir后缀的当然是指文件夹了。