Ant利用第三方的task

转自 http://blog.sina.com.cn/s/blog_3d21e545010006s9.html
一、如何使用第三方任务
  Ant可以使用第三方任务,在使用第三方任务之前,需告知Ant,这就是<taskdef>任务的用意。
  Ant中声明第三方任务有一下几种方法:
  1、声明中指定任务类名,比如:
    <taskdef name="document"
      classname="xdoclet.doc.DocumentDocletTask"
      classpath="${xdoclet.jar}"
    />
   2、比较常见的做法是,定义个properties文件,在该文件中将任务的名称和类名相对应,在一个文件中可以定义多个任务。在构建文件(build.xml)中,只需要指定该文件和类所在的路径,就可以一次定义多个任务了。比如:
      task.properties文件中:
     document=xdoclet.doc.DocumentDocletTask
     xdoclet=xdoclet.DocletTask
     ....
      在构建文件中,
      <taskdef file="task.properties"
               classpath="${xdoclet.jar}"
      />
   3、一般来说,如果第三方提供自己的任务,都会事先写好properties供他人使用。该properties文件一般存在jar包中,此时在构建文件中声明任务:
    
      <taskdef source="task.properties"
               classpath="${xdoclet.jar}"
      />
二、第三方任务ant-contrib
   要使用第三方任务ant-contrib,首先需在其网站获得ant-contrib.jar。
  ant-contrib主要有下面几个任务:
  1、C++编译和连接任务
  2、propertycopy--允许特性动态展开为解引用的特性。见学习笔记3--特性解引用
  3、osfamily--设置表明操作系统的特性,比如mac,windows,unix。
   <target name="testosfamily">
 <osfamily property="MyOs"/>
 <echo message="MyOs is ${MyOs}"/>
</target>
   将返回:
   [echo] MyOs is windows
  4、逻辑任务if,switch,foreach,trycatch等。
     if逻辑结构,例子: 
    <target name="testif">
  <if><not><isset property="testif1.prop"/></not>
    <then><echo message="testif1 is not set"/>
          <if><isset property="testif2.prop"/>
            <then><echo message="testif2 is  set"/></then>
            <else><echo message="testif2 is not set"/></else>
          </if>
    </then>
    <elseif><isset property="testif2.prop"/>
            <then><echo message="testif1 is set"/>
                  <echo message="testif2 is  set"/>
            </then>
    </elseif>
    <else>
         <echo message="testif1 is  set"/>
         <echo message="testif2 is not set"/>
    </else>
  </if>
</target>
 
   switch的逻辑结构,例子:
    <target name="testswitch">
  <switch value="${testswitch}">
    <case value="branch1">
     <echo message="enter branch1..."/>
    </case>
    <case value="branch2">
     <echo message="enter branch2..."/>
    </case>
    <default>
     <echo message="enter default branch..."/>
    </default>
  </switch>
</target>
 
   使用显示循环foreach,例子:
    foreach有两个要循环的列表,一个用list指定,另一个可用fileset指定。两个选其一就可以了,也可以两个同时存在。target和param必须存在。
    <target name="testforeach">
  <foreach list="1,2,3" target="loop" param="var"
  />
</target>
<target name="loop">
  <echo message="var = ${var}"/>
</target>
 <target name="testforeach">
  <foreach target="loop" param="var">
    <fileset dir="src"/>
   </foreach>
</target>
<target name="loop">
  <echo message="var = ${var}"/>
</target>
 
   捕获任务异常,例子:
 <target name="testtrycatch">
  <trycatch property="exception.prop"
            reference="exception.ref">
       <try>
         <fail>TestException!</fail>
       </try>
       <catch>
         <echo message="exception is caught here"/>
       </catch>
       <finally>
          <echo message="finally"/>
       </finally>
  </trycatch>
  <property name="exref" refid="exception.ref"/>
  <echo message="exception.prop=${exception.prop}, exception.ref=${exref}"/>
</target>
 
   输出结果为:
   [trycatch] Caught exception: TestException!
     [echo] exception is caught here
     [echo] finally
     [echo] exception.prop=TestException!, exception.ref=D:personaljavaantu
ild.xml:267: TestException!
原文地址:https://www.cnblogs.com/or2-/p/3591056.html