Ant是什么?
Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具。Ant是一个Java库和命令行工具,可帮助构建软件。把源代码构建成一个可发布的项目。
功能:(如果刚接触,能理解才奇了怪了,先不去管它是什么,先会用)
- Ant 是最完整的Java构建和部署工具。
- Ant是平台无关的,可以处理特定平台的属性,如文件分隔符。
- Ant 可以用于执行特定任务的平台,例如使用“触摸’命令修改文件的修改时间。
- Ant 脚本使用的是纯XML编写的。如果你已经熟悉XML,你可以学习Ant 很快。
- Ant擅长复杂的自动化重复的任务。
- Ant 自带的预定义任务的大名单。
- Ant提供了开发自定义任务的界面。
- Ant可以在命令行中很容易地调用,它可以与免费的和商业的IDE集成。
Ant的下载和安装
安装Ant之前要安装jdk
登录https://ant.apache.org/bindownload.cgi,下载Ant最新版。建议windows系统下载zip压缩包,Linux下载.gz压缩包。
解压之后文件结构:
1、bin:启动和运行Ant的可执行命令。
2、etc:包含一些样式单文件,通常无需理会。
3、lib:包含Ant的核心类库以及编译和运行Ant的第三方类库。
4、manual:Ant工具的相关文档,对学习Ant很有帮助。
设置系统环境变量
新建环境变量ANT_HOME,变量值Ant安装路径。
在变量Path中加入 %ANT_HOME%/bin;
检验是否配置成功?
打开cmd控制台,输入ant.bat,如图所示即可。
使用Ant工具
1、在cmd控制台输入ant.bat即可,如果没有指定任何参数,系统会在当前目录下搜索build.xml文件,找到了就以该文件作为生成文件,并执行默认的target(生成文件和target先看下文)。
2、如果ant -s或者ant -find,Ant就会到上级目录中搜索生成文件,直到搜索到文件系统的根路径。
3、如果要使用其他生成文件,ant -buildfile<生成文件>或者ant -f<生成文件>或者ant -file<生成文件>
4、如果希望Ant运行时只输出少量信息,可以使用ant -quiel或者ant -q
5、如果希望Ant运行时输出更多的提示信息,可以使用ant -verbose或者ant -v
6、如果将运行时提示信息输出到指定文件,可以使用ant -l或者ant -logfile
7、Ant允许运行时指定一些属性来覆盖生成文件中中指定的属性值。ant -D=,value这个值代替property属性的值。
8、默认情况下,Ant将运行生成文件中指定的默认target,要使用希望的target,可以使用
ant [target [target1 [target2] …] ]
9、了解更多用法,ant -help
定义生成文件
先别急,这里只讲述怎么定义生成文件,记住了再想别的。
使用Ant最关键就是编写生成文件,生成文件定义了该项目的各个生成任务,每一个target表示一个生成任务(每一个生成任务又包含一个或多个小任务),并定义target之间的依赖关系。
Ant生成文件的默认名是build.xml,生成文件可以放在项目中任何一个位置。
一个典型的项目层次结构:
1、src :存放源文件和各种配置文件
2、classes :存放编译后的class文件
3、lib :存放第三方jar包的文件夹
4、dist :存放项目打包,项目发布的文件
5、build.xml:Ant生成文件
接下来看看生成文件
Ant生成文件根元素**<project…/>**,每个项目下定义多个生成目标,每个生成目标以一个<target…/>元素定义。
project元素有多个属性:
default :指定默认的target,这个属性是必须的。
basedir :指定项目的基准路径,生成文件中的其他路径都是基于该路径的。
name :指定项目名。
description :指定项目的描述信息
例如:
<?xml version="1.0" encoding="GBK" ?>
<!-- 指定基准路径为当前路径,默认target为空-->
<project name="lalala" description="heihei" basrdir="." target="" >
...
</project>
每个生成目标对应一个**<target…/ >**
target元素有多个属性:
name:指定target名称,该属性必须。当希望Ant运行指定的生成目标时,就是根据该name确定的,同一个生成文件中不能有同名的targer元素。
depends:该属性可指定一个或多个target名,表示运行target之前先运行depends属性所指定的一个或多个target。
if:指定一个属性名,表示仅当设置了该属性名时才执行此target。(属性是可以定义的,接着看)
unless :该属性指定一个属性名,表示仅当没有设置该属性名才执行此target。
description :该target的描述信息。
<!-- 表示运行之前必须先执行名为zzz的target-->
<target name="aaa" depends="zzz"/>
<!--只有此target设置了reyixie属性才会执行此target-->
<target name="bbb" if="reyixie" />
<!--只有此target没有设置suibianxie属性才会执行此target-->
<target name="ccc" unless="suibianxie"/>
每个生成目标又可能由一个或多个任务序列组成,当执行某个生成目标时,实际上就是依次完成该目标所包含的全部任务。
定义任务的代码格式:
<name attribute1=“value1” attribute=“value2” … />
如:
<!--删除classes属性所代表的文件夹 $符号是获取括号里的属性的值 -->
<delete dir="$(classes)" />
project元素还有两个重要的子元素
1、<property…/>
用于定义一个或多个属性。Ant生成文件中的属性值不可改变。
定义一个属性:
<property name="suibianxie" value="haidilao"/>
获取属性的值,则使用${属性名} ,如:
${suibianxie}
要把$当成普通字符,应该写成 $$。
property元素还有以下几个属性:
name:指定需要设置的属性名
value:指定需要设置的属性值
resource:指定属性文件的资源名称,Ant将从属性文件中读出属性名和属性值。
file:指定属性文件的文件名,Ant将从属性文件中读取属性名和属性值
url:指定属性文件的url地址,Ant将从属性文件中读出属性名和属性值
environment:用于指定系统环境变量的前缀,通过这种方式允许Ant访问系统环境变量
classpath:指定搜索属性文件的classpath
classpathref:指定搜索属性文件的classpath引用,该属性并不是直接给出classpath值,而是引用<path…/>元素定义的文件和路径集。(后面再说)
<!-- 指定读取woshi属性文件中的属性名和属性值-->
<property file="woshi"/>
属性文件由一系列的name=value组成
author=fsgrwgwrb
book=fsdfvwgwg
price=2154
让Ant生成文件访问操作系统的环境变量的值
<!--首先定义访问操作系统环境变量的前缀是env-->
<property environment="env"/>
<!--输出JAVA_HOME的环境变量-->
<echo>${env.JAVA_HOME} </echo>
可以看到输出:[echo]C:\Java\jdk-9,这就是本电脑上JAVA_HOME环境变量的值。
2、<path…/>
使用Ant编译,运行Java时常常需要引用第三方的JAR包,这就需要使用<classpath…/>元素了。
<path…/>和用于定义一个或多个文件和路径集。
区别:
classpath元素通常作为其他任务的子元素,既可以引用已有的文件和路径集,也可以临时定义一个文件和路径集。
path作为project子元素,用于定义一个独立的、有名称的文件和路径集,用于被引用
这两个元素都可以接收如下子元素:
<dirset…/>:采用模式字符串的方式指定系列目录
如果需要指定多个路径集,使用此元素。dirset元素有个dir属性,指定该路径集的根路径。
dirset还可以使用<include…/>和<exclude…/>指定包含和不包含哪些目录
例如以下代码段
<!-- 指定该路径集的根路径是build目录-->
<dirset dir="build">
<!--指定包含apps目录下所有的classes目录-->
<include name="apps/**/classes"/>
<!--指定排除目录名中含有test的目录-->
<exclude name="apps/**/*test*"/>
? 匹配任何单字符
* 匹配0或者任意数量的字符
** 匹配0或者更多的目录
如果希望配置多个文件,采用:
<fileset…/>:采用字符串的方式指定系列文件
<filelist…/>:直接列出系列文件名的方式指定系列文件
filelist元素需要指定如下两个属性:
dir:指定文件集里多个文件所在的基准路径,必须属性
files:多个文件名列表
例如下列配置片段:
<!-- 配置src/abc.xml和src/bnm.xml文件组成的文件集-->
<filelist id="un" dir="src" files="abc.xml,bnm.xml"/>
id为该元素指定唯一标识
此外还有refid,用于指定引用另外一个元素
<filelist refid="un">
<!-- 此文件集与上面的un文件集包含的文件完全一样-->
除了使用files属性,还可以使用<file…/>子元素指定文件列表
<filelist id="un" dir="${doc}">
<file name="abc.xml"/>
<file name="bnm.xml">
</filelist>
fileset元素可以指定如下两个属性:
dir:文件集里多个文件的基准路径,必须
casesensitive:指定是否区分大小写,默认区分
也可以使用<include…/>和<exclude…/>两个子元素
**<pathelement…/>**指定一个或者多个目录
可以用下面属性中的一个:
path:指定一个或多个目录(或者jar文件)
location:指定一个目录或jar文件
Ant的任务
一个target元素包含多个task,Ant任务可以分为如下三类:
核心任务:核心任务是Ant自带的任务。
可选任务:来自第三方的任务,需要附加一个jar文件
自定义任务:自己开发的任务
常见的核心task:
javac:用于编译一个或多个java源文件,srcdir属性是源文件的位置,destdir属性是编译后class文件的位置。
java:用于运行某个java类,classname属性指定运行哪个类。
jar:生成jar包,destfile属性指定所创建jar包的文件名,通常还应指定一个文件集,将哪些文件打包。
sql:用于执行一条或多条sql语句。属性有driver,url,userid,password。
echo:输出某个字符串
exec:执行操作系统的特定命令
copy:用于复制文件或路径
delete:删除文件或路径
mkdir:创建文件夹
move:用于移动文件或路径
ant target名 :可执行对应target.