Anthtml
Apache Ant 是一个基于 Java的构建工具。java
下载Antweb
google、baidu。Windows用户下载zip格式。解压便可。apache
Windows安装Antapi
Ant本质上是一个Java程序且应用于Java代码的编译,所以为了使用Ant,系统须要好配置JDK。服务器
所谓的安装Ant,即配置环境变量。app
注意:Win7下安装时,若ANT_HOME配置在用户变量中,须要以管理员身份打开cmd才能够正常使用。因此,能够把ANT_HOME配置在系统变量中就行了。less
经过以上步骤后,在命令行下输入ant -version,即会显示ANT版本号。jsp
基础入门函数
HelloAnt工程
创建工程目录以下
bin存放二进制脚本。output存放打包后的jar文件。src存放源代码。build.xml文件是Ant脚本。
Java文件:HelloANT.java放到src目录下。
public class HelloANT { public static void main(String[] args) { System.out.println("Hello ANT!!!"); } }
build.xml文件
<project name="HelloANT" default="run"> <!--清空bin、output文件夹--> <target name="delete"> <delete dir="bin" includes="*" /> <delete dir="output" includes="*" /> </target> <!--将src中的java文件编译至bin文件中--> <target name="compile" depends="delete"> <javac srcdir="src" destdir="bin" /> </target> <!--将bin中的class文件打包成jar文件--> <target name="jar" depends="compile"> <jar destfile="output/HelloANT.jar" basedir="bin" /> </target> <!--运行bin文件中的HelloANT.class文件--> <target name="run" depends="jar"> <java dir="bin" classname="HelloANT" classpath="bin" /> </target> </project>
进入命令行,cd至build.xml文件存在的目录中。输入ant命令。
提示“BUILD SUCCESSFUL”,构建成功。
运行输出了“Hello ANT!!!”。
bin目录下生成Hello.class文件。
output目录下生成HelloANT.jar文件。
Ant脚本简介
Ant脚本是一个标准的XML文件,Ant脚本默认文件名为build.xml。
Ant脚本结构
Ant脚本的根元素是project,该元素中能够包含description元素、target元素、property元素和任何Task;target元素中也能够包含若干Task。project元素是Ant构建文件的根元素,它表示一个Ant工程。也即Ant脚本所定义的工程。
Ant脚本的整体结构如图:
ant关键元素
1. project元素
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,不然会发生错误。在每一个 project 元素下,可包含多个 target 元素。接下来向读者展现一下 project 元素的各属性。
2. target 元素
target为Ant的基本执行单元,它能够包含一个或多个具体的任务。多个target 能够存在相互依赖关系。
它有以下属性:
3.task元素
一个task是一段可执行的代码,也即由一个元素表示,元素的名称就是该Task的名称,不一样的Task中能够定义不一样的属性列表。
Task的通用结构以下:
<name attrubute1=”value1” attribute2=”value2” ... />
或
<name attrubute1=”value1” attribute2=”value2” ... > ... </name>
4. property 元素
property元素用于定义一个变量。
project 的属性能够经过 property 元素来设定,也能够Ant 以外设定。能够引入外部文件中的属性值。例如 build.properties 。
property元素的经常使用属性:
使用属性值
使用$符号使用属性值。
例:${builddir}
即输出builddir属性值。
$符号在Ant生成文件中具备特殊意义。若但愿Ant把$当成普通字符,则应该使用$$。
例:
<echo>$${builddir}=${buildir}</echo>
输出为:[echo] ${builddir}=dd
Ant 提供了一些内置的属性,它能获得的系统属性的列表与 Java 文档中 System.getPropertis() 方法获得的属性一致,这些系统属性可参考 sun 网站的说明。
同时, Ant 还提供了一些它本身的内置属性,以下:
ANT经常使用Task
ANT提供了很是多的Task,并且每一个Task都有较多的属性,因此不会一一列举了。这里只对经常使用Task的用法做简单说明,并给出简单示例。
编译任务
javac
javac:用于编译一个或多个Java源文件。
例:编译{src}目录及其子目录下的全部java文件。class文件将放在{build}指定的目录下,classpath表示须要用到的类文件或者目录,debug设置为on表示输出debug信息。
<javac srcdir="{src}" destdir="{build}" classpath="xyz.jar" debug="on" />
例:编译{src}和{src2}目录及其子目录下的全部。Java文件,可是package/p1/**,mypackage/p2/**将被编译,而mypackage/p1/testpackage/**将不会被编译。Class文件将放在{build}指定的目录下,classpath表示须要用到的类文件或者目录,debug设置为on表示输出debug信息。
<javac srcdir="{src}:{src2}" destdir="{build}" includes="mypackage/p1/**,mypackage/p2/**" excludes="mypackage/p1/testpackage/**" classpath="xyz.jar" debug="on" />
例:路径是在property中定义的。
<property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/> <javac srcdir="{src}" destdir="{src}" classpath="{classpath}" debug="on" />
归档任务(Archive Tasks)
归档任务用于对文件系统中的文件进行打包或解包。
jar
用于生产JAR包,一般须要指定destfile属性,用于指定所建立JAR包的文件名。一般还指定一个文件集,表示须要将哪些文件打包到JAR包里。
例:将{build}/classes下面的全部文件打包到{dist}/lib/app.jar中
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes"/>
例:将{build}/classes下面的全部文件打包到{dist}/lib/app.jar中,可是包括mypackage/test/全部文件不包括全部的Test.class
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes" includes="mypackage/test/**" excludes="**/Test.class" />
例:manifest属性指定本身的META-INF/MANIFEST.MF文件,而不是由系统生成。
<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes" includes="mypackage/test/**" excludes="**/Test.class" manifest="my.mf" />
war
该任务用于将一个Web应用打包为一个war文件。
例:假设文件目录以下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
下面是任务的内容:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml"> <fileset dir="src/html/myapp"/> <fileset dir="src/jsp/myapp"/> <lib dir="thirdparty/libs"> <exclude name="jdbc1.jar"/> </lib> <classes dir="build/main"/> <zipfileset dir="src/graphics/images/gifs" prefix="images"/> </war>
完成后的结果:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
执行任务
java
java:用于运行某个Java类,一般须要classname属性,用于指定须要运行哪一个类。
例:classname中指定要执行的类,classpath设定要使用的环境变量
<java classname="test.Main"> <classpath> <pathelement location="dist/test.jar"/> <pathelement path="{java.class.path}"/> </classpath> </java>
文件任务
copy
copy主要用来对文件和目录的复制功能。举例以下:
例:复制单个文件并为复制的文件命名。
<copy file="original.txt" tofile="copied.txt"/>
例:将文件复制到另外的目录。
<copy file="source.txt" todir="../home/philander"/>
例:将一个目录复制到另一个目录下。
<copy todir="../dest_dir"> <fileset dir="src_dir"/> </copy>
例:拷贝一批文件到指定目录下
<copy todir="../dest/dir"> <fileset dir="src_dir"> <include name="**/*.java"/> <iexclude name="**/Test.java"/> </fileset> </copy> <copy todir="../dest/dir"> <fileset dir="src_dir" excludes="**/*.java"/> </copy>
例:拷贝一批文件到指定目录下,将文件名后增长。Bak后缀
<copy todir="../backup/dir"> <fileset dir="src_dir"/> <mapper type="glob" from="*" to="*.bak"/> </copy>
delete
对文件或目录进行删除,举例以下:
例:删除某个文件。
<delete file="/home/photos/philander.jpg"/>
例:删除某个目录。
<delete dir="/home/photos"/>
例:删除全部的备份目录或空目录。
<delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.bak"/> </delete>
mkdir
建立目录。
例:<mkdir dir="/home/philander/build/classes"/>
move
移动文件或目录,举例以下:
例:移动单个文件。
<move file="sourcefile" todir=”movedir”/>
例:移动单个文件到另外一个目录。
<move file="sourcefile" todir=”movedir”/>
例:移动或重命名一个文件
<move file="file.orig" tofile="file.moved"/>
例:移动或重命名一个文件到另外一个文件夹下面
<move file="file.orig" todir="dir/to/move/to"/>
例:移动某个目录到另外一个目录。
<move todir="newdir"> <fileset dir="olddir"/> </move>
例:将一组文件移动到另外的目录下
<move todir="some/new/dir"> <fileset dir="my/src/dir"> <include name="**/*.jar"/> <exclude name="**/ant.jar"/> </fileset> </move>
例:移动文件过程当中增长。Bak后缀
<move todir="my/src/dir"> <fileset dir="my/src/dir"> <exclude name="**/*.bak"/> </fileset> <mapper type="glob" from="*" to="*.bak"/> </move>
其余任务
echo
该任务用于输出指定的消息。默认输出到标准控制台,同时能够经过指定file属性将消息输出到文件中。另外,能够经过level属性指定在哪一站消息级别下输出消息。
echo包括 message 、 file 、 append 和 level 四个属性。
<echo message="Hello,ANT" file="/home/philander/logs/ant.log" append="true">
命令行中的Ant命令
运行Ant构建脚本
先使用cd命令到达目标文件夹下。
ant:该命令会让ant自动搜索当前文件夹下的build.xml。若找到,则以该文件做为生成文件,并执行默认的target。
ant -buildfile a.xml:该命令解析执行当前路径下的a.xml文件。-buildfile可使用 -f -file代替。
ant -f a.xml:同上。
ant -file a.xml:同上。
运行指定的target
默认状况下下,Ant运行生成文件里指定的默认target。
ant target :运行时指定须要运行的target。
ant target1 target2 :运行多个target。
ant命令的通常格式:
ant [options] [filename] [targer1 [target2 [target3] ...]]
例:ant run
即运行build.xml文件中名称为run的target。
例:ant -f another.xml t1 t2 t3
即运行another.xml文件中名称为t1 t2 t3的target。
options能够分别去如下值:
-help 或 -h
打印ant命令的帮助信息。
-projecthelp 或 -p
打印工程的基本信息,包括工程中的全局Task、Target、default Target等。
-version
打印Ant版本信息并退出。
-diagnostics
打印能够帮助诊断和报告错误的系统信息,包括Ant的版本、Ant系统内建属性的值、Ant库、Java系统的属性、计算机的属性等。
-quiet 或 -q
ant运行时,只打印Task的输出信息和重要的出错信息。让构建脚本安静的执行。
-verbose 或 -v
ant运行时,即打印尽量详细的信息到输出终端。
-debug 或 -d
执行脚本时打印调试信息,调试信息比使用-v打印的详细信息提供了更丰富的信息。
-emacs 或 -e
对打印信息不做任何修饰。
-lib <path>
指定一个搜索库文件的路径,包括jar文件和class文件。
-logfile 或 -l <file>
ant运行时将提示信息输出到指定文件,而不是直接输出到控制台。
例:
ant -verbose -l a.log 运行时ant生产更多的提示信息,并将提示信息输出到a.log文件中。
-logger <classname>
指定进行日志记录的类。
-listener <classname>
指定一个类,将该类的实例添加为工程的一个监听器。
-noinput
不容许输入交互性质的输入。
-D<property>=<value>
运行ant命令的同时指定属性的值,相似于在运行构建脚本时输入参数。该属性会覆盖脚本中的属性值。
例:
ant -Dbook=Spring2 该命令会覆盖生成文件中的book属性值。
ant -Denv=%ANT_HOME% 该命令使用环境变量的值。经过这种方式就能够将环境变量的值传入生产文件。在Linux平台下改成 ant -Denv1=$ANT_HOME。
-keep-going 或 -k
执行过程当中,若在运行某个Target时出错,则继续执行剩余的全部不依赖于出错Target的Target。
-propertyfile <name>
指定一个属性文件,从文件中装载全部属性的值,但若还使用-D指定了相同的属性,则-D指定的属性值具备更高的优先级。
-inputhandler <class>
指定一个类,使用该类处理输入请求。
-find 或 -s <file>
从当前目录逐级向上级目录搜索指定的构建文件直到文件系统的根目录。若没有指定<file>则搜索build.xml,搜索到构建文件后执行构建文件。
-nice number
设置Ant主线程的优先级,0为最低,10为最高,默认为5。
-nouserlib
运行脚本的时候不使用用户目录库中的jar文件。
-noclasspath
运行脚本的时候不使用类路径。
-autoproxy
在Java1.5以上的运行环境中,该设置在运行Ant脚本时自动使用操做系统配置的代理服务器。
-main <class>
指定一个主函数的类,该主函数将覆盖Ant的常规主函数,提供新的运行入口点。
该文仅为学习文档,更多详细资料可参考官方教程