如果需要在一个构件文件中通过Ant命令去执行另一个Ant项目,或者说要执行本项目的子项目的构件文件。这时Ant这个核心任务就派上用场了。简单地说Ant任务的作用就相当于在命令行通过Ant命令执行构件文件。值得注意的是Ant任务依赖于target元素,需要在某个target元素中使用,不能在target元素外独立使用。

Ant任务还可以实现类似Java程序间的继承关系,不过对于这个核心任务来说只继承property元素和reference属性。举个例子说,项目A中包含通过Ant任务去执行的项目B,而项目B中需要用到项目A中的属性C,那么可以通过设置的Ant任务中的inheritAll属性,使得在B项目中可以使用项目A中的属性C。从另一方面看,这也符合XP(极限)编程中的细分功能的思想,可以把大的项目切分为几分小项目,然后通过Ant工具进行整合。

 

项目结构:

project

-build.xml

-build1.xml

-build2.xml

-build3.xml

-file.properties

 

build.xml:

  1. <?xml version="1.0"?> 
  2.  
  3. <project default="run" basedir="." name="MyProject"> 
  4.       
  5.     <property file="user.properties"/> 
  6.       
  7.     <target name="run"> 
  8.         <ant antfile="${file1}" dir="." output="file1.log" target="call"/> 
  9.         <ant antfile="${file2}" dir="." /> 
  10.         <ant antfile="${file3}" dir="." /> 
  11.     </target> 
  12.       
  13. </project> 

 

build1.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <project default="init" basedir="." name="MyProject1"> 
  4.       
  5.     <target name="init"> 
  6.         <echo message="This is in Project1's init target."/> 
  7.     </target> 
  8.       
  9.     <target name="call"> 
  10.         <echo message="The call in Project1"/> 
  11.     </target> 
  12.       
  13. </project> 

 

build2.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <project default="call" basedir="." name="MyProject2"> 
  4.  
  5.     <target name="init"> 
  6.         <echo message="This is in Project2's init target."/> 
  7.     </target> 
  8.       
  9.     <target name="call" depends="init"> 
  10.         <echo message="The call in Project2"/> 
  11.     </target> 
  12.       
  13. </project> 

 

build3.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <project default="call" basedir="." name="MyProject3"> 
  4.       
  5.     <target name="init"> 
  6.         <echo message="This is in Project3's init target."/> 
  7.     </target> 
  8.       
  9.     <target name="call"> 
  10.         <echo message="The call in Project3"/> 
  11.     </target> 
  12.       
  13. </project> 

 

 

file.properties

  1. file1=build1.xml  
  2. file2=build2.xml  
  3. file3=build3.xml 


运行结果:

  1. Buildfile: C:\hxw\workspace\hibernate\build.xml  
  2. run:  
  3. call:  
  4.      [echo] The call in Project1  
  5. init:  
  6.      [echo] This is in Project2's init target.  
  7. call:  
  8.      [echo] The call in Project2  
  9. call:  
  10.      [echo] The call in Project3  
  11. BUILD SUCCESSFUL  
  12. Total time: 78 milliseconds