Ant构建

简介

Apache Ant是一个Java库和命令行工具,其任务是将构建文件中描述的进程作为相互依赖的目标和扩展点。只要使用过Linux系统的读者,应该知道 make这个命令。当编译Linux内核及一些软件源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似,像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。

Ant的优点

  • 跨平台性。Ant是存Java语言编写的,所示具有很好的跨平台性。

  • 操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。

  • Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件时XML格式的文件,所以和容易维护和书写,而且结构很清晰。

  • Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

Ant的开发

Ant的构建文件

当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为 build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
( 注:很多项目的ant脚本中的命名基本上都是一致的,比如:编译一般叫build或者compile;打包一般叫jar或war;生成文档一般命名为 javadoc或javadocs;执行全部任务all。在每个任务的中,ANT会根据配置调用一些外部应用并配以相应参数执行。虽然ANT可调用的外部应用种类非常丰富,但其实最常用的就2,3个:比如javac javadoc jar等。)
(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布以后的代码。

Ant构建文件是XML文件

每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。
(1) 核心任务。核心任务是Ant自带的任务。
(2) 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。
(3) 用户自定义的任务。用户自定义的任务实用户自己开发的任务。

Eclipse的集成ANT

打开Eclipse,点击导航栏的"Window"-->"Preferences"-->"Ant"

Ant构建_第1张图片
image.png

创建一个java项目

Ant构建_第2张图片
image.png

在根目录创建一个build.xml文件

Ant构建_第3张图片
image.png

切换默认的Ant版本,Ant的插件管理

  • 1、菜单栏中打开Window-Preferences-Ant-Runtime
Ant构建_第4张图片
image.png

总共需要设置两项:
1、Ant Home Entries(Default),点击Ant Home,选择ant插件路径:
2、设置Global Entries路径,即为jdk中tools.jar路径

Ant自动化构建

使用ant的主要工作就是配置它的xml文件,默认为build.xml文件。

Ant构建_第5张图片
image.png

build.xml的配置参数

1.标签

每个构建文件都有一个对应标签,标签时构建文件的根标签有以下属性:

  • default:表示默认的运行目标,即指定默认的target(即任务),这个属性是必须的。
  • basedir:表示项目的基准目录。
  • name:表示项目名。
  • description:表示项目的描述。

每个项目对应一个构建文件,但是如果项目比较复杂,包含大量的子项目,每一个子项目都对应有自己的构建文件。

2.标签

有两个特点:

  • 大小写敏感
  • 不可改变,谁先设定,之后的都不能改变。
    语法:${property}

1 、设置 name 和 value 属性值,比如:

2 、 设置 name 和 refid 属性值,比如: ,其中dao.compile.classpath 在别的地方定义。

3 、设置 name 和 location 属性值,比如: ,即将 srcdir 的值设 置为:当前项目根目录的 /src 目录。

4 、设置 file 属性值,比如: , 导入 build.properties 属性文件中的属性值

5 、设置 resource 属性值,比如: , 导入 build.properties 属性文件中的属性值

6 、设置 url 属性值,比如: , 导入http://www.blogjava.net/wiflish/build.properties 属性文件中的属性值。

7 、设置环境变量,比如: ,设置系统的环境变量为前缀 env.
将系统的 tomcat 安装目录设置到 tomcat.home 属性中。

3.标签

  • 引入别的xml文件,提高复用性

  • 含有相同的 target,最终调用哪个target都是以 调用的那个xml文件为基础。若当前xml中没有target,就会从import中寻找。

4.标签

任务,一个project标签下有一个或多个target标签,代表任务,任务间可以存在依赖关系。有如下属性:

  • name表示目标名,这个属性是必须的。
  • depends表示依赖的任务目标。
  • if表示仅当属性设置时才执行,用于验证指定的属性是否存在,若不存在,所在target将不会被执行。
  • unless表示当属性没有设置时才执行。
  • description表示项目的描述。

5.标签

控制台显示,用于打印/输出信息,类似于log4j的info方法

  • ${msg}
  • hello!

以上四种方式均可以显示相应信息

6.标签

该标签用于删除文件或文件目录,有如下属性:

  • file:删除文件
  • dir:删除目录
  • includeEmptyDirs:值得是否删除空目录,默认是true
  • failonerror:报错是否停止,默认是true
  • verbose:是否列出删除的文件,默认是false

    
        
        
        
        
        
            
                
            
        
        
        
            
                
                
                
            
        
    

7.标签

该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:

通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。

8.标签

该标签用于拷贝文件或文件目录,属性如下:

  • file:表示源文件
  • tofile:表示目标文件。
  • todir:表示目标目录。
  • overwrite:是否覆盖目标文件,默认为false
  • includeEmptyDirs:是否拷贝空目录,默认为true
  • failonerror:如目标没有发现是否自动停止,默认值true
  • verbose:是否显示详细信息,默认值false

    
         
            
            
            
         
    

9.标签

文件集标签,通常与任务结合来使用,用于批量cope和delete

  • dir:指定目录
  • include:包含的子目录

10.执行文件

用来执行系统命令,或者指定环境的命令

打开命名行,并转到c盘执行dir命令


    
        
    

能够执行系统命令,就相当于可以执行各种环境比如node、gulp、bower等等:



    
    
        
    




    
    
        
    

11.标签

该标签用来生成一个JAR文件,其属性如下

  • destfile表示JAR文件名
  • basedir表示被归档的文件名
  • includes表示被归档的文件模式
  • excludes表示被排除的文件模式

标签

该标签用来生成一个WAR包,其属性如下:

  • destfile表示生产JAR文件名。
  • dir表示被归档的文件目录。
  • includes表示别归档的文件模式。
  • exchudes表示被排除的文件模式。

12.

该标签用于编译一个或一组java文件,其属性如下

  • srcdir表示源程序的目录,必须的
  • destdir表示class文件的输出目录,默认是当前文件夹
  • include表示被编译的文件的模式
  • excludes表示被排除的文件的模式
  • classpath表示所使用的类路径
  • debug表示包含的调试信息
  • optimize表示是否使用优化
  • verbose 表示提供详细的输出信息
  • fileonerror表示当碰到错误就自动停止

13.标签

该标签用来执行编译生成的.class文件其属性如下

  • classname 表示将执行的类名
  • jar表示包含该类的JAR文件名
  • classpath所表示用到的类路径
  • fork表示在一个新的虚拟机中运行该类
  • failonerror表示当出现错误时自动停止
  • output 表示输出文件
  • append表示追加或者覆盖默认文件

14.标签

AntCall 任务的作用是允许在一个target的执行过程中调用并执行其他的target,AntCall任务必须在target元素内执行,这个任务不能在target元素外执行。

需要从一个target传递参数到被调用的target时,可以使用 类型进行传递,对于param 类型只有两个属性:name和value


    
        
    

执行sync_module_item任务,并设置参数html.dir的值为org。
该任务定义如下:


    
    
        
            
        
    

或者更为简单的表达:


    
    
    
    
    
    
    
    

15.标签

并行执行多个子任务

通过failonany控制如果一个失败,则不执行。通过并行执行,来提升性能,降低构建花费的时间


    
    
    
    
    
    
    
    

    

**16.标签

用于正则的定义的使用,可以与matches结合使用。
比如,定义正则:



通过pattern指定正则内容,通过id标识。
在需要匹配的时候,使用之:


    
        
    

**17.标签

用来判断,如果包含的内容符合条件,则将property指定的属性设置为true,否则为false。
比如上面的例子中,就是将basedir变量的值和regexp_env_test对应的正则匹配,如果正确,就将is_test设置为true,然后后面的流程再去判断。
与之配合的标签有很多,下面一一介绍:

  • istrue,isfalse:断言

    
        
        
    

只有is_test和is_backend变量的值均为true,is_test_backend的值才为true。

  • and:逻辑与,需要都满足条件才行,如上例所述。
  • not:逻辑非,反过来的结果。
  • or,xor:逻辑或和逻辑异或。
  • isset:指定属性是否存在:

    
    

  • equils:指定属性是否相等:

    
    

  • filesmatch:指定文件是否相等:

    
    

实例

 



builds, tests, and runs the project. 

















































































 ==================================================


  显示项目基本信息.


  项目名称: ${project.name}

  项目版本: ${project.version}

  作者 : ${author}

   时戳 : ${dstamp}-${tstamp}



  用法:

     ant -buildfile build.xml compile 或

     ant compile 或

     ant 甚至

     ant clean dist

   帮助:

     ant -projecthelp



==================================================





 ==================================================



   创建各种文件夹.



================================================== 





































 ==================================================



   生成帮助文档.



==================================================











 ==================================================



  编译所有源程序.



==================================================





















 ==================================================



   运行所有测试程序.



==================================================























 ==================================================



   生成分发文件:

      ${dist.jar}



==================================================


























 ==================================================



   把文件部署到指定位置:

      ${deploy.war}



==================================================















  




模板

以下xml依次定义了init(初始化),compile(编译),test(测试),doc(生成文档),pack(打包)任务,可以作为模板



  

  

       

       

       

       

       

  

       

       

           

           

       

       

       

       

       

       

           

           

               

           

       

       

       

           

           

               

               

               

                   

                       

                   

               

           

           

         ***********************************************************   

         ****   One or more tests failed!   Check the output ...   ****   

         ***********************************************************   

           

       

       

       

        

           

               

               

           

       

       

       

        

        

               

                   

               

             Hello, test]]>  

             All Rights Reserved.]]>  

               

           

       

  

你可能感兴趣的:(Ant构建)