Ant的使用
简介
一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,多用于 Java 环境中的软件开发。由Apache软件基金会所提供.Ant 也可以有效地用于构建非Java应用程序,如 C 或 C++ 的应用程序。更一般地,Ant 可以用来驾驶任何类型的能在目标和任务来描述过程
安装与使用
下载:http://ant.apache.org/bindownload.cgi
安装:解压缩到指定目录下即可
环境变量配置:
ANT_HOME:安装目录(D:\program\ant-1.10.5)
path:%ANT_HOME%\bin
验证:cmd命令:ant -verison
官方文档
http://ant.apache.org/manual/
Ant命令
运行默认build.xml:cd进入build目录下,运行命令:ant
运行指定文件:运行命令:ant -buildfile ant -lib xxx.jar -f
attribute | description |
---|---|
-help | 显示描述ant 命令及其选项的帮助信息 |
-projecthelp | 显示包含在构建文件中的、所有用户编写的帮助文档。即为各个中description 属性的文本,以及包含在元素中的任何文本。将有description 属性的目标列为主目标(Main target),没有此属性的目标则列为子目标(Subtarget)。 |
-version | 要求ant 显示其版本信息,然后退出。 |
-quiet | 抑制并非由构建文件中的echo 任务所产生的大多数消息。 |
-verbose | 显示构建过程中每个操作的详细消息。此选项与-debug 选项只能选其一。 |
-debug | 显示Ant 和任务开发人员已经标志为调试消息的消息。此选项与-verbose 只能选其一。 |
-emacs | 对日志消息进行格式化,使它们能够很容易地由Emacs 的shell 模式(shellmode)所解析;也就是说,打印任务事件,但并不缩排,在其之前也没有[taskname]。 |
-logfile filename | 将日志输出重定向到指定文件。 |
-logger classname | 指定一个类来处理Ant 的日志记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger 接口。 |
-listener classname | 为Ant 声明一个监听类,并增加到其监听者列表中。在Ant与IDE或其他Java程序集成时,此选项非常有用。可以阅读第六章以了解有关监听者的更多信息。必须将所指定的监听类编写为可以处理Ant 的构建消息接发。 |
-buildfile filename | 指定Ant 需要处理的构建文件。默认的构建文件为build.xml。 |
-Dproperty=value | 在命令行上定义一个特性名-值对。 |
-find filename | 指定Ant 应当处理的构建文件。与-buildfile 选项不同,如果所指定文件在当前目录中未找到,-find 就要求Ant 在其父目录中再进行搜索。这种搜索会继续在其祖先目录中进行,直至达到文件系统的根为止,在此如果文件还未找到,则构建失败。 |
-atuoproxy | jdk1.5以上的可以使用代理设置 |
-nouserlib | 运行ant时不使用用户lib中的jar包 |
-nice | 设计主线程优先级 |
-logfile | 使用指定的log日志 |
-noinput | 不允许交互输入 |
-keep-going, -k | 执行不依赖于所有目标 |
-propertyfile | 加载所有属性配置文件 -d 属性文件优先 |
Ant基本元素
project:必须有且只有一个,作为最外层元素
target:构建文件执行基本单位,代表一个独立任务,一个xml文件可以有多个
depens:依赖的任务,被依赖的任务先执行
Eclipse集成Ant
Ant元素解析
project
name:指定元素名称
default:执行默认执行的target
basedir:基本路径,如未设置,则使用构建文件的父目录为基本路径,basedir="."
target
name:指定target名称,project中唯一,可直接设置target名称来执行某个target
depends:target间依赖关系。target多个时,以"."为间隔,从左至右执行
if:验证指定属性是否存在,如存在,则执行;反之亦然
unless:验证指定属性是否不存在,如不存在,则执行;反之亦然
description:描述信息
property
basedir:project基本路径,同project元素
ant.file:buildfile的绝对路径
ant.version:Ant版本信息
ant.project.name:指定当前project名字,值与project的name属性值一致
ant.java.version:JDK版本
作为target属性值使用:
<property name="name" value="jojo" /> //定义
<echo message="name: ${name}" /> //使用
copy
file:需要复制的文件
tofile:复制的目标文件名
todir:复制的目标目录名
overwrite:设置为false(默认)时,要求被复制的文件比目标文件新;设置为true时,为强制覆盖
将本地内容复制到远程服务器上
<sshexec host="172.17.227.186" username="root" password="feixun*123" command="service jboss stop" trust="true" /> //连接远程服务器
<scp todir="user:password@IP:/usr/local/jboss/standalone/deployment s" trust="true"> //复制文件
<fileset dir="../build/compileDir/compileWar">
<include name="**/*.war" />
</fileset>
</scp>
delete
file:删除的文件名
dir:删除的目录名
<delete file="/res/image/cat.jpg"/> //删除文件
<delete dir="/res/image"/> //删除目录
<delete includeEmptyDirs="true"> //删除指定类型文件
<fileset dir="." includes="**/*.jar"/>
</delete>
mkdir
dir:创建的目录名
<mkdir dir="/home/philander/build/classes"/>
move
file:移动的文件名
tofile:移动的目标文件名
todir:移动的目标目录名
echo
message:打印的信息
file:存放的日志的文件名
append:
level:日志等级
<echo message="ant message" file="/logs/ant.log" append="true">
<echo message="a${line.separator}b${line.separator}c"/> //${line.separator}类似换行符
jar
destfile:jar文件名
basedir:被归档的目录名
includes:别归档的文件模式
excludes:被排除的文件模式
compress:是否压缩
<jar destfile="${webRoot}/${ash_jar}" level="9" compress="true" encoding="utf-8" basedir="${dest}">
<manifest> //MEAT-INF 中的 MANIFEST.MF 中的文件内容
<attribute name="Implementation-Version" value="Version: 2.2"/>
</manifest>
</jar>
javadoc
sourcepath、sourcefiles 和 sourcepathref 必需指定其中一个, 否则必须提供嵌套的 sourcepath、 fileset 或者 packageset。destdir 必须指定
sourcepath:源文件目录,可用嵌套的sourcepath代替
sourcefiles:逗号分割开的文件列表,可用嵌套的source代替
destdir:输出文件所在目录,通常为doc/api下
packagenames:Java包列表,逗号分隔。可用嵌套的package代替
packagelist:指定一个需javadoc处理的列表的父文件夹
use:生成class和package的用法
version:生成@version的信息
author:生成@author的信息
windowtitle:生成doc的浏览窗口标题
header:每一页的header信息
footer:每一页的footer信息
botton:每一页的bottom信息
nodeprecated:不生成@deprecated的信息
常见可嵌套的参数:packageset、fileset、package、excludepackage、source、doctitle、header、footer 和 bottom
path-like接口参数:javadoc 的 sourcepath、classpath 和 bootclasspath,也就是说可以完全用嵌套的sourcepath、 classpath 和 bootclasspath 来代替。
<javadoc packagenames="com.dummy.test.*"
sourcepath="src"
defaultexcludes="yes"
destdir="docs/api"
author="true"
version="true"
use="true"
windowtitle="Test API">
<classpath refid="compile.classpath"/>
</javadoc>
<javadoc author="true"
destdir="{javadoc.dir}"
packagenames="org.example.helloworld.*"
sourcepath="src"
use="true"
version="true"
windowtitle="Helloworld api spec"
private="true">
<classpath refid="compile.classpath"/>
</javadoc>
<javadoc destdir="docs/api" author="true" version="true" use="true" windowtitle="Test API">
<packageset dir="src" defaultexcludes="yes">
<include name="com/dummy/test/**" />
<exclude name="com/dummy/test/doc-files/**"/>
</packageset>
<doctitle>
<![CDATA[<h1>Test</h1>]]>
</doctitle>
<bottom>
<![CDATA[<i>Copyright © 2000 Dummy Corp. All Rights Reserved.</i>]]>
</bottom>
<tag name="todo" scope="all" description="To do:" />
<group title="Group 1 Packages" packages="com.dummy.test.a*"/>
<group title="Group 2 Packages" packages="com.dummy.test.b*:com.dummy.test.c*"/>
<link offline="true" href="::URL::http://java.sun.com/ products/jdk/1.2/docs/api/" packagelistLoc="C:/tmp"/>
<link href="::URL::http://developer.java.sun.com/developer/products/xml/docs/api/"/>
</javadoc>
environment
file:环境变量的文件名
path:环境变量绝对路径
value:环境变量的一个直接变量
key:环境变量名
注意:file,path,value只能取一个,功能同property
arg
可通过arg元素向其传递命令行参数,如apply、exec、java
values:命令参数,如单独参数值中有空格,则用此属性
file:参数文件名,相当于当前工作目录
line:多个参数列表,空隔分开
pathref:引用的path(使用 path 元素节点定义 path )的id
prefix:前缀
suffix:后缀
<arg value="-l -a"/> //单个命令行变量,含空格
<arg line="-l -a"/> //多个命令行变量,含空格
<arg path="/dir;/dir2:\dir3"/> //单个命令行变量
javac
srcdir:源程序目录,相当于 javac 命令的 -sourcepath参数,srcdir也是 javac的隐式 implicit 的 FileSet,因此 srcdir 支持 FileSet 的所有特征。
destdir:classes文件输出目录,相当于javac命令的-d参数
include:被编译的文件模式
excludes:被排除的文件模式
classpath:所使用的类路径
debug:包含的调试信息,值为yes时,相当于javac命令的-g参数,否则相当于-g:one
optimize:是否使用优化,默认off,值为on时,相当于javac命令的-o参数
verbose:提供详细的输出信息
fileonerror:如编译错误,是否停止,默认为true
deprecation:是用来deprecation的API的源文件位置,默认off,值为on时,相当于javac命令的-deprecation参数
fork:使用外部JDK编译器运行javac,默认no。值为yes时,效率高,对设备要求高
<javac destdir="{build.classes.dir}"
debug="{build.debug}"
includeAntRuntime="yes"
srcdir="{sirc.dir}">
<classpath refid="compile.classpath"/>
<include name="**/*.java"/>
</javac>
java
classesname:被执行的类名
jar:包含该类的jar文件名
classpath:用到的类路径
fork:在新的虚拟机上运行该类
failonerror:如编译错误,是否停止,默认为true
output:输出文件
append:追加或覆盖默认文件
<java classname="AntTest">
<classpath>
<pathelement path="build/classes" />
</classpath>
</java>
filelist
包含在filelist类型中的文件不一定存在
dir:绝对路径
files:文件名列表,逗号分隔
refid:对某处定义的一个filelist引用
fileset
许多ant任务构建成了隐式的fileset,即支持所有fileset属性和嵌套元素,fileset下文件必须存在
dir:fileset根目录
casesensitive:匹配大小写,默认为true
defaultexcludes:是否使用默认的排除模式,默认为true
excludes:需要排除的文件模式列表,逗号分隔
excludesfile:每行包含一个排除的文件的文件名
includes:需要包含的文件模式列表,逗号分隔
includesfile:每行包括一个包含模式的文件名
patternset
模式的分组。支持4个属性:includes、excludex、includexfile、excludesfile与fileset相同。还允许以下嵌套元素:include、exclude、includefile 和 excludesfile
filterset
过滤器,在文件移动或复制时完成文本替换
begintoken:嵌套过滤器所搜索的记号,标识其开始的字符串
endtoken:嵌套过滤器所搜索的加号,标识其结束的字符串
id:过滤器的唯一标识符
refid:对构建文件中某处定义一个过滤器的引用
path
类路径,也可标识其他路径。用作几个属性时,路径中各项用分号或冒号分隔。
location:文件或目录
refid:对当前构建文件中的某处定义的一个path的引用
path:文件或路径名列表
支持的嵌套元素:
0…n个嵌套的 pathelement, pathlelement 定义在路径下的一个或者多个文件,pathelement 支持 location 和 path 这两个 attribute,用法和 path 元素一样;
0…n个嵌套的 fileset ;
0…n个嵌套的 path;
<path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
</path>
<path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src/**/*.java"/>
</fileset>
</path>
<path>
<pathelement location="{libdir}/servlet.jar"/>
<pathelement location="{libdir}/logging.jar"/>
<pathelement path="{builddir}"/>
<pathelement path="{utilpath}"/>
</path>
打包案例
待更新