下载安装包:http://ant.apache.org
配置环境变量:ANT_HOME=ant dir
添加批处理命令ant_path/bin到环境变量path中
验证是否安装成功:cmd -> ant -version
一般来说,Ant 的构建文件默认为 build.xml,放在项目顶层目录中。然而,并没有限制构建文件必须命名为 bulid.xml,也并不限制放在项目顶层目录中
构建文件需要包含项目元素 (project 标签) 和至少一个目标元素 (target 标签)
标签
属性 | 描述 |
---|---|
name | 项目名称[可选] |
default | 构建脚本默认运行的目标,需要指定一个target,一个project 可以包含多个target [必填] |
basedir | 设置基准目录,未指定时默认为Ant 的构件文件的附目录作为基准目录 |
标签
一个target是一系列你想运行的任务 (tasks),运行时看成一个整体单元
属性 | 描述 |
---|---|
name | target的名称 |
depends | 依赖的其他target,多个依赖需要使用","分开,被依赖的 target 会按照顺序先执行 [可选] |
description | target的功能描述信息 [可选] |
if | 用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行 [可选] |
unless | 该属性的功能与 if 属性的功能正好相反 |
<?xml version="1.0"?>
<project name="Hello World Project" default="info">
<target name="info">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
</project>
Ant 使用属性 (property) 标签来让你能够具体说明属性
默认情况下,Ant 提供以下预定义的属性
属性 | 作用 |
---|---|
ant.file | 该构建文件的完整地址 |
ant.version | 安装的 Apache Ant 的版本 |
basedir | 构建文件的基目录的绝对路径,作为 project 标签的 basedir 属性 |
ant.java.version | Ant 使用的 JAVA 语言的软件开发工具包的版本 |
ant.project.name | 项目的名字,具体声明为 project 标签的 name 属性 |
ant.project.default-target | 当前项目的默认target |
ant.project.invoked-targets | 在当前项目中被调用的目标的逗号分隔列表 |
ant.core.lib | Ant 的 jar 文件的完整的地址 |
ant.home | Ant 安装的主目录 |
ant.library.dir | Ant 库文件的主目录,特别是 ANT_HOME/lib 文件夹 |
用户也可以使用 property 元素定义一些额外的属性
对于大项目,最好将设置属性的信息存储在一个独立的文件中
一般情况下,属性文件都被命名为 build.properties, 并且与 build.xml 存放在同一目录层。 你可以基于部署环境 ,比如: build.properties.dev 和 build.properties.test 创建多个 build.properties 文件
引用外部配置文件
<property file="build.properties"/>
Ant 提供一些预定义的数据类型,代表一组已经在产品中配置好的服务
文件集:
文件集的数据类型代表了一个文件集合。它被当作一个过滤器,用来包括或移除匹配某种模式的文件
例:选择源文件夹中所有的 .java 文件,除了那些包含有 ‘Stub’ 单词的文件
<fileset dir="${src}" casesensitive="yes">
<include name="**/*.java"/>
<exclude name="**/*Stub*"/> <--!排除含有'Stub' 单词的文件-->
</fileset>
模式集合:
模式集合指的是一种模式,基于这种模式,能够很容易地过滤文件或者文件夹
例:
<patternset id="java.files.without.stubs">
<include name="src/**/*.java"/>
<exclude name="src/**/*Stub*"/>
</patternset>
文件列表:
文件列表数据类型与文件集相类似,除了以下几处不同:
文件列表包含明确命名的文件的列表,同时其不支持通配符
文件列表数据类型能够被应用于现有的或者还不存在的文件中
例:属性 webapp.src.folder 指向该项目中的 Web 应用的源文件夹
<filelist id="config.files" dir="${webapp.src.folder}">
<file name="applicationConfig.xml"/>
<file name="faces-config.xml"/>
<file name="web.xml"/>
<file name="portlet.xml"/>
</filelist>
过滤器集合:
通常使用一个过滤器集合数据类型结合拷贝任务,你可以在所有文件中使用一个替换值来替换掉一些与模式相匹配的文本
例:
<copy todir="${output.dir}">
<fileset dir="${releasenotes.dir}" includes="**/*.txt"/>
<filterset>
<filter token="VERSION" value="${current.version}"/>
</filterset>
</copy>
路径:
path 数据类型通常被用来表示一个类路径。各个路径之间用分号或者冒号隔开。然而,这些字符在运行时被替代为执行系统的路径分隔符
<path id="build.classpath.jar">
<pathelement path="${env.J2EE_HOME}/${j2ee.jar}"/> //pathelement主要用来引用一个文件,一个目录
<fileset dir="lib"> //fileset:主要用来引用一个目录
<include name="**/*.jar"/>
</fileset>
</path>
编译:
属性 | 描述 |
---|---|
srcdir | 表示源程序的目录 |
destdir | 表示class文件的输出目录 |
include | 表示被编译的文件的模式 |
excludes | 表示被排除的文件的模式 |
classpath | 表示所使用的类路径 |
debug | 表示包含的调试信息 |
optimize | 表示是否使用优化 |
verbose | 表示提供详细的输出信息 |
fileonerror | 表示当碰到错误就自动停止 |
<target name="build" description="Compile main source tree java files">
<mkdir dir="${build.dir}"/>
<javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}"/>
<classpath refid="master-classpath"/>
</javac>
</target>
删除构建文件夹中的所有文件:
<target name="clean" description="Clean output directories">
<delete>
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
</delete>
</target>
使用标签对项目进行打包
属性 | 描述 |
---|---|
basedir | 表示输出 JAR 文件的基目录。默认情况下,为项目的基目录 |
compress | 表示告知 Ant 对于创建的 JAR 文件进行压缩。 |
keepcompression | 表示 project 基目录的绝对路径 |
destfile | 表示输出 JAR 文件的名字 |
duplicate | 表示发现重复文件时 Ant 执行的操作。可以是添加、保存、或者是使该重复文件失效 |
excludes | 表示移除的文件列表,列表中使用逗号分隔多个文件。 |
excludesfile | 与上同,但是使用模式匹配的方式排除文件 |
inlcudes | 与 excludes 正好相反 |
includesfile | 表示在被归档的文件模式下,打包文件中已有的文件。与 excludesfile 相反 |
update | 表示告知 Ant 重写已经建立的 JAR 文件 |
示例:
<jar destfile = "${web.dir}/lib/util.jar"
basedir = "${build.dir}/classes"
includes = "faxapp/util/**"
excludes = "**/Test.class">
<manifest> //设置主启动类
<attribute name = "Main-Class" value = "com.tutorialspoint.util.FaxUtil"/>
</manifest>
</jar
执行:ant build-jar