一、Ant是什么?
Ant是一种基于Java和XML的build工具。
它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简易的方式来构建整个项目。Ant究竟能做什么呢?这取决于Ant的任务(Task),Ant有哪些任务,就能完成哪些工作!一些典型的任务是:编译java源代码、运行java程序、拷贝文件或目录、将编译完成的类打包等等。
当然,Ant是一个开放的架构,任何人,都可以按照自己的方式,添加自己的任务(Task),这需要
遵守Ant的一些规范。
二、ANT的安装部署
1、 确保你的机器已经安装了JDK,确保你的path环境变量中包含有java虚拟机的运行程序,确保你的环境变量中有JAVA_HOME变量
2、 下载ant并解压
3、 设置ANT_HOME环境变量,指向ant解压根目录
4、 在path环境变量中,添加ANT_HOME/bin目录
5、 打开控制台,运行:ant
6、 如果能够运行ant(忽略这些异常:Buildfile: build.xml does not exist!),而不是出现诸如命令无法解释的错误,那么你的ant就安装成功了
三.Ant的运行靠的就是一个构建脚本,默认名称为build.xml,只要你构建一个这样的文件,按照规定把需要完成的工作任务写在这个配置文件中,然后在dos下运行ant就会执行这个文件,如果文件名不是默认的(例如mybuild.xml),则这样运行:ant -f mybuild.xml ,如果该配置文件不存在将会报错:Buildfile: build.xml does not exist!
三、ANT的组成(主要由三部分组成:Project、Target、Task)1、Project(项目)。基本属性:name、default、basedir。一个build.xml只能存在一个Project工程。
name :项目名称
default :缺省开始执行的Target
basedir :用于计算所有其他路径的基路径。
例1:<project name="dev" basedir="." default="dist">
2、Target。一个项目可以定义一个或多个Target、一个Target是一系列你想要执行的任务,而一个target一般包含若干task,如编译任务、打包任务、混淆任务。
Target的基本属性: name:target的名字,depends:该target依赖关系,description: target的描述信息。
例2:<target name="clean" depends="init" description="Clean dist and temp directories">
Ant在执行时以Target为单位,Target的depends属性又决定了哪个Target先执行,因此我们可以通过Target来构造编译顺序。
例3:<target name="copy" >
<target name="javac" depends="copy">
<target name="jar" depends="javac">
执行顺序是从下至上,依次执行,如果某个Target没有depends属性,那么就顺序执行。
例4:一个完整的Target:
<target name="compile" depends="replacesrc" description="Compiling Java source files">
<javac srcdir="temp/src"
destdir="temp/build"
debug="on"
deprecation="false"
optimize="true">
<classpath refid="classpath"/>
</javac>
</target>
3、Task。Ant执行的一系列任务是由Target构成的,而Target又是由数个小的Task构成的,task任务是最小的运行单位,我们可以把copy、delete、mkdir等操作认为是一个小任务。
(1)copy任务。
A.拷贝单个文件:
<copy file="Demo/manifest.mf" todir="temp/build/META-INF" />
解释:把一个文件拷贝到拷贝相关文件夹中。
B.拷贝文件夹:
<copy todir="temp/build">
<fileset dir="temp/classes"/>
</copy>
解释:把temp/build目录下的所有文件,拷贝到temp/classes目录中去
C.替换拷贝
<copy todir="temp/build">
<fileset dir="temp/classes" includes="*.class" />
<filterset>
<filter token="@Time@" value="${app.time}"/>
</filterset>
</copy>
解释: <filterset>过滤集,可以将temp/classes文件夹下的存在@Time@标记的文件,替换为变量${app.time}值。这样在完成拷贝的同时也完成了替换任务。
(2)mkdir任务和delete任务
A.单独的delete和mkdir任务
<delete dir="temp/src"/>
<delete file="temp/build/Thumbs.db" />
<mkdir dir="temp/src"/>
<