ant是一种基于Java的生成工具。
ant的运行需要设置两个环境变量,JAVA_HOME, ANT_HOME.。
为了使用方便还需要将%ANT_HOME%/bin/ant.bat添加到PATH环境变量中。
ant命令在没有指定任何参数时,会在当前目录搜索build.xml文件作为生成文件。
build.xml通常放在项目的顶层目录中,如:
<project>
│─src:
│─classes:
│─lib: 存放第三方jar包
│─dist: 存放项目打包,项目发布文件
│─build.xml:Ant生成文件
build.xml生成文件
<project.../>为根元素,可包含N个子元素<target.../>,每个代表一个生产目标,N个<property.../>用于定义属性,N个<path.../>用于定义文件和路径集。
<project.../>常用属性:
default:指定默认target,必需属性。
basedir:指定项目的基准路径。
name:项目名。
description:项目的描述信息。
<target.../>常用属性:
name:该target的名称,必需属性。
depends:指定N个target名,表示该target所依赖的targets。
if:指定一个属性名,表示仅当这个设置了这个属性时,才可执行该target。
unless:与if属性相左。
description:项目的描述信息。
<property.../>常用属性:
name:属性名。
value:属性值。
resource:资源名,Ant将从此属性文件中读取属性名和属性值。
file:文件名,Ant将从此属性文件中读取属性名和属性值。
url:URL地址,Ant将从此属性文件中读取属性名和属性值。
environment:指定系统环境变量前缀,用于访问系统环境变量。
classpath:搜索属性文件的文件和路径集。
classpathref:搜索属性文件的文件和路径集引用。
<path.../>和<classpath.../>都用于定义文件和路径集(可用属性id),
区别:classpath元素通常作为其他target的子元素,即可引用已有的,也个临时定义。path用于定义文件和路径集,常被引用,
<path.../>和<classpath.../>可接受的子元素。
pathelement:指定N个目录(可指定的属性:path,指定N个目录或JAR文件,用:或;分开,location指定一个目录或JAR文件)。
dirset:采用模式字符串指定系列目录(属性:dir指定目录集的根路径)(可用<include.../>和<exclude.../>子元素指定包含和不包含的目录)。
fileset:采用模式字符串指定系列文件(属性dir:根路径,必需属性,casesensitive:是否区分大小写)。
filelist:采用直接列出系列文件名的方式指定系列文件(属性dir:根路径,必需属性,files:文件名列表,用,或空白分开)(N个子元素<file.../>定义文件列表)。
ant常用的核心任务
javac, java, jar, sqk, echo, exec, copy, delete, mkdir, move等。
示例
build.xml
<?xml version="1.0" encoding="GBK"?>
<project name="antQs" basedir="." default="">
<property file="build.properties"/>
<path id="classpath">
<pathelement path="${classes.home}"/>
</path>
<!-- ==================== Compile Target ================================== -->
<target name="compile" description="编译Java源文件">
<delete dir="${classes.home}"/>
<mkdir dir="${classes.home}"/>
<javac srcdir="${source.home}"
destdir="${classes.home}"
debug="${compile.debug}"
deprecation="${compile.deprecation}"
optimize="${compile.optimize}">
<classpath refid="classpath"/>
</javac>
</target>
<!-- ==================== Archive Target ================================== -->
<target name="archive" description="打包JAR文件" depends="compile">
<delete dir="${dist.home}"/>
<mkdir dir="${dist.home}"/>
<jar destfile="${dist.home}/app.jar" basedir="${classes.home}" includes="**/*.class" />
</target>
<!-- ==================== Clean Target ==================================== -->
<target name="clean" description="清除所有编译生成的文件">
<delete dir="${classes.home}"/>
<delete dir="${dist.home}"/>
</target>
</project>
build.properties
#==================== File and Directory Names ========================
app.version=0.1
source.home=./src
lib.home=./WebContent/WEB-INF/lib
build.home=./build
dist.home=./dist
classes.home=./classes
#==================== Compilation Control Options =====================
compile.debug=true
compile.deprecation=false
compile.optimize=true