环境依赖说明 : jdk
不同版本的ant需匹配不同版本的jdk
1.9.*版本-运行时至少需要Java5
1.10.*版本-运行时至少需要Java8
官网 : http://ant.apache.org/
下载地址 : https://ant.apache.org/bindownload.cgi
- 安装
wget https://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.10.8-bin.tar.gz
tar zxvf apache-ant-1.10.8-bin.tar.gz -C /usr/local/
ln -s /usr/local/apache-ant-1.10.8/bin/ant /usr/sbin/
- 添加ant配置文件
在项目目录中添加ant脚本文件
vim build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="web-test" default="buildwar">
<!-- 配置环境变量 -->
<property name="program.name" value="web-test" />
<property name="com.dir" location="./WebRoot/WEB-INF/classes/com" />
<property name="program.dir" location="./${program.name}" />
<property name="source.dir" location="./WebRoot" />
<property name="lib.dir" location="./${program.name}/WEB-INF/lib" />
<property name="class.dir" location="./${program.name}/WEB-INF/classes" />
<property name="src" location="./src" />
<!-- 准备程序目录 -->
<target name="init" description="准备程序所需目录">
<delete dir="${com.dir}" />
<delete dir="${program.dir}" />
<mkdir dir="${com.dir}" />
<mkdir dir="${program.dir}" />
</target>
<!-- 将已有文件copy至项目目录 -->
<target name="prepare" depends="init" description="复制项目文件至新目录">
<copy todir="${program.dir}" overwrite="true">
<fileset dir="${source.dir}" />
</copy>
<copy todir="${class.dir}/" overwrite="true">
<fileset dir="${src}">
<exclude name="com/"/>
</fileset>
</copy>
</target>
<!-- 编译Java文件 -->
<target name="compile" depends="init,prepare" description="编译Java文件">
<javac srcdir="${src}"
destdir="${class.dir}"
fork="true"
debug="on"
encoding="UTF-8"
includeantruntime="on">
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
</target>
<!-- 打war包 -->
<target name="buildwar" depends="init,prepare,compile" description="将编译后项目进行打包">
<war destfile="${program.name}.war"
webxml="${program.dir}/WEB-INF/web.xml"
defaultexcludes="true">
<fileset dir="${program.dir}">
<!-- <include name="**/**" /> -->
<!-- <exclude name="**/**" /> -->
</fileset>
</war>
</target>
</project>
- 使用说明
##在目录中,直接执行ant命令
ant
##在目录中,指定配置文件
ant -f build.xml
- 配置文件参数说明:
包含一个project节点和至少一个target节点,target节点包含多个task元素。简单说,target节点代表着你的构建目标,而该目标是由多个操作/任务(task)来达成的。
project --- 根节点,代表一个工程
###属性说明:
name:项目名称。 (非必填)
basedir:指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。 (非必填)
default:指定project默认执行时所执行的target的名称。 (非必填)
property --- 设置一个或多个属性(可以在其它地方通过${属性名}进行引用)
###属性说明:
name:要设置的属性名称。
value:属性的值。
location:将属性设置为给定文件的绝对路径。如果此属性的值为绝对路径,则保持不变,否则会相对于项目的basedir解析路径。
refid:引用其他位置的定义。
resource:包含属性文件格式属性设置的类路径的资源名称。
file:要加载的属性文件位置。
url:包含属性文件格式设置的url。
environment:检索环境变量时使用的前缀。
classpath:查找资源使用的类路径。
classpathref:类路径的引用。
prefix:通过file、resouorce和url加载属性时使用的前缀。
target --- 目标节点,代表着一个构建目标
###属性说明:
name:target的名字。 (必填)
depends:用逗号分隔的target的名字列表,也就是依赖表。 (非必填)
description:关于target功能的简短描述。 (非必填)
if:满足条件执行(true)。 (非必填)
unless:不满足条件执行(false)。 (非必填)
target中常见tasks说明:
============
delete --- 删除目录或文件
###属性说明:
dir: 表示要删除的目录,该目录下的文件和子目录都会被删除
file: 表示要删除的文件
============
mkdir --- 创建目录
###属性说明:
dir: 表示要创建目录
============
echo --- 向屏幕或文件输出信息
###属性说明:
message: 表示要输出的信息
file:表示信息输出到该文件中(如果指定了该属性,信息将不会在屏幕上显示)
level:表示信息级别(未指定该属性时的默认级别为"warning")
============
copy --- 拷贝文件或目录
###属性说明:
todir: 表示拷贝到哪个目录下
includeemptydirs:是否拷贝空目录
file:要拷贝的单个文件(只针对单个文件的拷贝,上例中没有指定该属性,而是通过内嵌<fileset>来指定多个文件)
============
javac --- 编译源文件
###属性说明:
srcdir: 源文件路径(多个源之间用:分隔,可通过内嵌<src>元素进行设定,如上例)
destdir: 存放编译后的class文件路径
includes: 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的.java文件被包含进去
excludes: 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
debug: 编译时是否显示调试信息
includeantruntime: 是否包含ant库路径
classpath: 依赖库路径(上例中通过内嵌<classpath>元素进行了设定)
============
jar --- 将class文件打成jar包
###属性说明:
destfile:将创建的jar包位置
basedir:将被打成jar包的目录(或通过内嵌的<fileset>元素进行设定)
includes:包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去
excludes:排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
============
war --- 将项目文件打包成war包
###属性说明:
destfile:将创建的war包位置名称
webxml:指定web相关信息文件路径位置
basedir:将被打成war包的目录(或通过内嵌的<fileset>元素进行设定)
ant中经常需要指定资源集合,主要通过下面元素指定
============
fileset
###属性说明:
dir 文件集合的根目录(该目录下的文件都会被包含)
file 快捷指定单个文件
includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去
excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
可内嵌<include>、<exclude>、<includesfile>、<excludesfile>等元素
============
patternset --- 模式集合
###属性说明:
id 唯一标识(其它<patternset>元素通过refid指向该模式)
可内嵌<include>、<exclude>、<includesfile>、<excludesfile>等元素
============
include --- 指定单个包含
exclude --- 指定单个排除
###属性说明:
name 要包含或排除的模式。
============
includesfile --- 指定单个包含
excludesfile --- 指定单个排除
###属性说明:
name 模式文件名(文件内容为包含或排除模式)
ant运行java类,或执行编译时,都需要指定classpath,可通过下面三个元素来指定引用的jar包或class文件
============
classpath --- 类路径,内嵌在<javac>,<java>等元素中,表示依赖库路径
###属性说明:
refid 指向该id对应的元素
location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}
其它说明:可内嵌<fileset>、<pathelement>等元素来指定jar文件或目录
============
path --- 类路径集合,被<classpath>或其它<path>引用。
path用法类似<classpath>元素,但是<path>跟<target>同级,而classpath是内嵌在<java>或<javac>元素中。
============
pathelement --- 单个类路径,内嵌在<classpath>或<path>中
###属性说明
location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}
- javac指定编译器
修改build.xml
中配置文件,增加配置executable="/usr/local/jdk1.8.0_241/bin/javac"
<target name="compile" depends="init,prepare" description="编译Java文件">
<javac executable="/usr/local/jdk1.8.0_241/bin/javac"
srcdir="${src}"
destdir="${class.dir}"
fork="true"
debug="on"
encoding="UTF-8"
includeantruntime="on">
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
</target>