Agile - Ant

   Apache Ant是一个基于 Java build 工具 ( 有翻译成“生成工具”,感觉怪怪,故直译 ) Ant 不是蚂蚁的意思,根据创始人 James Duncan Davidson 介绍,这是 Another Neat Tool 的首字母缩写。
 
   生成工具在软件开发中用来将源代码和其他输入文件转换成可执行文件的形式,或者部署Web工程等。很多IDE都能支持这种直接的编译和部署,但有时当系统比较大的时候,或者系统需要部署在不同工作环境下的时候,IDE可能不大好使。使用Ant能够使得工程的编译和部署更简单,并且能确保在部署期间都使用精确相同的步骤,最最重要的是能够实现尽可能多的自动化,这在敏捷开发的过程中是十分重要的,前面说的自动部署等工作都是由它来完成的。
 
   使用Ant之前,首先要下载并安装Ant,然后在工程根目录下面建立一个叫build.xml的文件,这是默认的名字,叫其它的名字也可以,默认是build。
 
      Ant 没有定义它自己的自定义语法,它的生成文件是用 XML 编写的,就像前面说的build.xml,这个文件中要采用一些Ant能理解的预定义XML元素,当然,我们还可以自己定义新的元素来扩展Ant的功能。每个生成文件由单个 project 元素组成,该元素又包含一个或多个 target 元素。一个target是已定义的一个步骤,它执行任意数量的操作,比如编译一组源文件。然后这些target将根据需要被分组到各个 target 元素中。比如说,一个生成临时文件的target,一般会被初始化的target调用,也可能被unittest的target调用。
 
    顶级 project 元素需要包含一个 default 属性,如果在 Ant 被调用时没有指定目标,这个属性将指定要执行的目标。然后需要使用 target 元素来定义该目标本身。下面是一个最基本的生成文件:
  <?xml version="1.0"?>
    <project default="init">
      <target name="init">
      </target>
    </project> 
 
     下面介绍一下Ant工程文件中的一些常用元素:
  1.      属性<property name="SRC" value="../src"/>
  Ant的属性有点像Java中的变量,但又不是一般的常量,他们一经定义就不可改变,有点像是final。然后在工程文件中的其它地方引用的时候用${SRC}。
  2.      定义依赖关系
  <target name="init"/>
  <target name="pre-compile" depends="init"/>
  <target name="compile" depends="init,pre-compile"/>
  上面这几个Target定义了他们之间的执行顺序,compile执行之前init和pre-compile要先执行,而pre-comiple执行之前,init要执行完毕,也就是initàpre-compileàcompile. 这里不用担心一个任务会被重复执行多次,依赖关系只是确保他们已经被执行,并不是一定会执行一遍。
  3.      使用过滤功能
  当我们需要将工程部署在不同的环境时,比如Dev,QA,UAT等,我们需要用不同的数据库连接,不同的文件路径等等,而一般情况下我们只建立了一个工程文件,所以这个时候就需要替换掉相应的值,如果手工处理的话,除了累晕了还有可能做错了。Ant的过滤功能可以实现自动替换。首先要定义好替换的变量:
  <filterset id="filterSet" begintoken="%%" endtoken="%%">
    <filter token="AS_HOME" value="${AS_HOME}" />
         <filtersfile file="./filter.properties" />
  </filterset>
     这个filterset定义了将工程文件中的%% AS_HOME %%替换成前面定义的变量${AS_HOME}的值。除了在工程文件中单独定义,还可以在properties文件中定义,然后引用进来就可以。比如在拷贝配置文件的时候,通常需要替换一些值的,这时便可以使用这个filterset,
    <copy toDir="./destFolder" >
      <fileset dir="${template.config.dir}/app/filConfig" />
                  <filterset refid="filterSet" />
    </copy>
  4.      在Ant中使用宏Macrodef
  有时我们需要对重用一个target,但由于一些参数属性的不同,不用直接调用,使用我们需要用macrodef来定义可重用的target。Example,
 
  <macrodef name="test">  //这里是macrodef的定义,定义了name属性
    <attribute name="one"/>  //参数定义,可以在macrodef外部调用                  
    <attribute name="two" default="@{one}"/>  //内部参数
    <sequential> //实际执行的内容在sequential里
      <echo>one=@{one}   two=@{two}</echo>
    </sequential>
  </macrodef>
 
  调用的时候是这样子的:<test one="test"/> 。需要注意的是:1)在整个工程文件中,macrodef跟target是同个level的;2)macrodef可以调用其它macrodef,但不能调用target;target可以调用其它target,也可以调用macrodef。
 
  前面简单介绍了一些Ant的常用操作,具体的使用可以参考Ant的官网
  下面开始介绍一个完整的Ant工程大致的流程。
  1) Define the initial  properties
         -- include properties files, which set the true value in it
         -- create a "properties" target to define the set the values into variables
      
  2) init-build: clean the dest folder and create the folder which would be used during deploy
 
  3) Set project classpath: set some path with id for refer when compile class, like third party lib, etc.
 
  4) Compile the dependent component: if the project is associated with other project, then we need to
  compile the dependency project ahead.
 
  5) Build classes to the dest build folder
 
  6) Init-package, prepare configuration (including filter config files with filter.properties file), and copy it to
  the dest folder
 
  7) Package spring config, JSF config, toplink config, third party lib and other lib the project dependence,
   project jar file into war.
 
  8) Copy the project war package to OC4J
 
  9) Prepare the config file which need to copy to OC4J, like app config file, template file
 
  10) Copy the config file prepared in step 8 to OC4J.
 
  11) Undeploy the application in OC4J.
 
  12) Deploy the application into OC4J.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值