ANT的使用(转)

Ant的使用 
Ant的使用

 

       Ant,以我自身的理解,它的作用类似与Linux下的makefile,可以对软件项目进行编译、生成文档、单元测试、打包、部署等;但又不同与makefile,因为makefile是基于shell的构建工具,但Ant是基于Java的构建工具,且使用Java语言可以很容易的对它进行扩展,Ant是基于XML的书写格式。

 

一、安装Ant

1、  先将Ant解压到一个目录,假如解压到D:\ant

2、  设置环境变量

set ANT_HOME=d:\ant

set PATH=%PATH%;%ANT_HOME%\bin

 

二、使用Ant

Ant的构建文件是用XML格式书写的,每个build文件包含一个project和至少一个默认的target。

<?xml version="1.0" encoding="UTF-8"?>

<project name="jartest" default="jar" basedir=".">

       
<target name="jar" depends="war">

              
<jar jarfile="${basedir}/Operation.jar">

                     
<fileset dir="bin">

                            
<include name="**/*.class" />

                     
</fileset>

                     
<!--

                     <fileset dir="src">

                            <include name="jndi.properties"/>

                     </fileset>

                     
-->

              
</jar>

       
</target>

       
<target name="war">

              
<war warfile="OperationTest.war" webxml="web/WEB-INF/web.xml">

                     
<fileset dir="web">

                            
<include name="**/*.jsp"/>

                     
</fileset>

              
</war>

       
</target>

</project>

 

1、  Project

Project有三个属性name,default,basedir

Name:Project的名字

Default:build文件运行时默认的target

Basedir:进行项目构建的根目录,如果没有设置此项,则默认与build文件同目录

 

2、  Target

一个Target可以依赖于其它多个Target,

            
<target name="A"/>

            
<target name="B" depends="A"/>

想要执行B必需先执行A

Target的属性:name,depends,if,unless,description

Name:Target的名字

Depends:执行当前Target时需要依赖的Target

If:这个属性的名字必需设置,当前的Target才能执行

<target name="A" if="file"/>

Unless:这个属性的名字必需不能设置,当前的Target才能执行

<target name="A" unless="file"/>

Description:对当前Target的一段描述

 

3、  Tasks

具体需求执行的任务,这个就有很多了,如:WAR, EAR, JAVAC, JAVA, JAR, COPY, COPYDIR, COPYFILE, MKDIR, MOVE, DELETE, ECHO, EXEC, UNZIP, ZIP, TAR, UNJAR, UNTAR, UNWAR, SCP, FTP, TELNET, 等等,以下是各Task的属性介绍:

 

(1)  Javac:编译Java源文件

         Srcdir:Java文件的目录

         Destdir:Class文件的保存目录

         Includes:需要包含哪些文件

         Excludes:不包含哪些文件

         Classpath:编译时需要引用的classpath

         Debug:编译时是否包含debug信息

  
<javac destdir="${build}" classpath="xyz.jar" debug="on">

    
<src path="${src}"/>

                            
<src path="${src2}"/>

                            
<include name="mypackage/p1/**"/>

                            
<include name="mypackage/p2/**"/>

                            
<exclude name="mypackage/p1/testpackage/**"/>

                             
</javac>

 

(2)  Java:运行class文件

  Classname:需要执行的class文件名

  Jar:需要执行的jar文件,必须包含程序入口类,有Main方法的类

  Args:执行class需要的参数

  Classpath:需要使用的classpath

                     
<java jar="dist/test.jar" fork="true" failonerror="true" maxmemory="128m">

                        
<arg value="-h"/>

                        
<classpath>

                       
<pathelement location="dist/test.jar"/>

                       
<pathelement path="${java.class.path}"/>

                        
</classpath>

               
</java>

 

(3)  Jar:将多个class文件打成一个jar包

Destfile:需要创建的jar文件名

Basedir:文件的来源

         Includes:需要包含哪些文件

         Excludes:不包含哪些文件

                    
<jar destfile="${dist}/lib/app.jar"

                      basedir
="${build}/classes"

                      includes
="mypackage/test/**"

                      excludes
="**/Test.class"

                    
/>

 

(4)  War:将文件打包成War文件

Destfile:需要创建的war文件名

Webxml:web.xml文件的路径及文件名

Basedir:文件的来源

         Includes:需要包含哪些文件

         Excludes:不包含哪些文件

                     
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">

                          
<fileset dir="src/html/myapp"/>

                          
<fileset dir="src/jsp/myapp"/>

                          
<lib dir="thirdparty/libs">

                          
<exclude name="jdbc1.jar"/>

                          
</lib>

                          
<classes dir="build/main"/>

                          
<zipfileset dir="src/graphics/images/gifs" 

                          prefix
="images"/>

                  
</war>

 

(5)  Ear:将文件打包成Ear文件

Destfile:需要创建的ear文件名

appxml:META-INF/application.xml文件的路径及文件名

Basedir:文件的来源

         Includes:需要包含哪些文件

         Excludes:不包含哪些文件

                     
<ear destfile="${build.dir}/myapp.ear" appxml="${src.dir}/metadata/application.xml">

                                 
<fileset dir="${build.dir}" includes="*.jar,*.war"/>

               
</ear>

 

(6)  Mkdir:创建一个目录

<mkdir dir="${dist}"/>

 

(7)  Delete:删除一个文件,或文件夹及其包含的文件

File:需要删除的文件名

Dir:需要删除的目录

<delete file="/lib/ant.jar"/>

<delete dir="lib"/>

                  
<delete>

                      
<fileset dir="." includes="**/*.bak"/>

                  
</delete>

 

4、  Properties

一个Project可以设置多个Property,可以在build文件内使用,也可以通过Ant命令使用

(1) 在build文件内

          
<property name="build" location="build"/>

          
<delete dir="${build}"/>

(2) 通过Ant命令,使用选项为:-Dproperty=value

          
<property name="build" location="build"/>

          执行Ant命令:ant –Dbuild=aa 则location的值就变为aa了

              设置Property的六种方式

(1) 通过name,value的属性设置

         
<property name="foo.dist" value="dist"/>

(2) 通过name,refid的属性设置

(3) 通过file,url,resource属性设置,foo.properties是键值对的属性文件

         
<property file="foo.properties"/>

         
<property resource="foo.properties"/>

         
<property url="http://www.mysite.com/bla/props/foo.properties"/>

(4) 通过environment属性设置,获得环境变量

         
<property environment="env"/>

        
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>

 

三、运行Ant

ant [options] [target [target2 [target3] ]]

Options:

  -help, -h              print this message

  -projecthelp, -p       print project help information

  -version               print the version information and exit

  -diagnostics           print information that might be helpful to

                         diagnose or report problems.

  -quiet, -q             be extra quiet

  -verbose, -v           be extra verbose

  -debug, -d             print debugging information

  -emacs, -e             produce logging information without adornments

  -lib 
<path>            specifies a path to search for jars and classes

  -logfile 
<file>        use given file for log

    -l     
<file>                ''

  -logger 
<classname>    the class which is to perform logging

  -listener 
<classname>  add an instance of class as a project listener

  -noinput               do not allow interactive input

  -buildfile 
<file>      use given buildfile

    -file    
<file>              ''

    -f       
<file>              ''

  -D
<property>=<value>   use value for given property

  -keep-going, -k        execute all targets that do not depend

                         on failed target(s)

  -propertyfile 
<name>   load all properties from file with -D

                         properties taking precedence

  -inputhandler 
<class>  the class which will handle input requests

  -find 
<file>           (s)earch for buildfile towards the root of

    -s  
<file>           the filesystem and use it

  -nice  number          A niceness value for the main thread:

                         1 (lowest) to 10 (highest); 5 is the default

  -nouserlib             Run ant without using the jar files from ${user.home}/.ant/lib

  -noclasspath           Run ant without using CLASSPATH

 

如:ant -buildfile test.xml -Dbuild=build/classes dist

原文地址:https://www.cnblogs.com/SunWentao/p/1254368.html