ant
使用
简
介
ant
是
apache
工程的一个子工程,是一个基于
java
的
build
工具。
ant
类
似于
make
工具,但没有
传统
的
make
工具的缺点。
传统
的
make
往往只能限制在某一平台上使用,
ant
本身用
java
类实现
,要构建的工程的配置文件用
xml
格式描述,可以很方便
实现
多平台
编译
,
非常适合
build
大型工程。
1.
安装配置
ant:
ant
可以从
http://ant.apache.org
下
载
,目前最新版本
为
1.5.2
。下
载
完
毕
后直接解
压缩
,目
录
如下:
ant
+-- bin // contains launcher scripts
|
+-- lib // contains Ant jars plus necessary dependencies
|
+-- docs // contains documentation
| +-- ant2 // a brief description of ant2 requirements
| |
| +-- images // various logos for html documentation
| |
| +-- manual // Ant documentation (a must read )
|
+-- etc
需要
设
置的
环
境
变
量:
ANT_HOME:ant
的安装目
录
JAVA_HOME:jdk
的安装目
录
PATH:
把
%ANT_HOME%\bin
目
录
加到
path
变
量,以便
于从命令行下直接运行
ant
假定
ant
装在
c:\ant jdk
装
d:\j2sdk1.4.0
则
在命令行下
执
行以下命令:
set ANT_HOME=c:\ant
set JAVA_HOME=D:\j2sdk1.4.0
set PATH=%PATH%;c:\ant\bin
在
win2000
命令提示符下工作
时
,
每
次都必
须进
行上面的
设
置,退出命令提示符后,
这
些
变
量的
值
又会恢
复
成原来的
样
子。
为
了避免
这
些麻
烦
,可以在
控制面板
\
系
统
\
高
级
\
环
境
变
量
中
设
置。
上述
设
置完成后,就可以使用
ant
了。
2.
建立工程描述文件
build.xml
用
ant
编译规
模
较
大的工程非常方便,
每
个工程都
对应
一个
build.xml
文件,
这
个文件包含与
这
个工程有
关
的路径信息和任
务
。下面是一个
build.xml
的例子:
<project name="logon" basedir="." default="dist">
<property name="dist.name" value="struts_demo"/>
<property name="src" location="src"/>
<property name="build" location="WEB-INF/classes"/>
<property name="dist" location="D:/tomcat/webapps/dist"/>
<!--
Build working classpath -->
<path id="project.class.path">
<pathelement path ="WEB-INF/lib/struts.jar"/>
<pathelement path ="WEB-INF/classes"/>
<pathelement path ="${classpath}"/>
</path>
<target name="init">
<tstamp/>
<!-- Create the build directory structure used by compile -->
<delete dir="${dist}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}">
<classpath refid="project.class.path"/>
</javac>
</target>
<!-- Build binary distribution -->
<target name="dist" depends="compile"
description="Create binary distribution">
<mkdir dir="${dist}"/>
<war destfile="${dist}/${dist.name}.war"
webxml="WEB-INF/web.xml">
<lib dir="WEB-INF/lib"/>
<classes dir="WEB-INF/classes"/>
<fileset dir="${basedir}"/>
</war>
</target>
</project>
要构建的工程目
录
如下:
struts_demo
+--jsp
|
+--src
|
+--WEB-INF
| +--classes
| |
| +--lib
| |
| +--web.xml
|
+--build.xml
每
个
build.xml
文件都包含一个
project
和至少一个
target
。
target
包含任
务
元素,任
务
是一段可
执
行代
码
,
每
个任
务
元素都有一个
id
属性,以便于在文件中引用。
ant
有内置任
务
集可供使用,如上面文件中用到的
property
、
javac
和
war,
分
别
完成
设
置属性、
编译
和打包任
务
。当然如果需要的
话
也可以写自己的任
务
。
build.xml
的根元素是
progject,
它有三个属性
name default basedir,
其中
default
是必需的。
name
指定工程的名字,
basedir
表示工程的基路径,
设
置
为
"."
表示
build.xml
所在的路径。
default
表示默
认
的
target
,运行
ant
时
如果不指定
target
,
则
用
default
指定的
target.
property
任
务
用来
设
置属性,一个工程可以
设
置很多属性,属性有名字和
值
,属性
设
置后可以在后面引用。
<property name="dist.name" value="struts_demo"/>
设
置一个名字
为
dist.name
的属性,其
值为
struts_demo
,后面使用
时
用
${dist.name}
引用,表示字符串
struts_demo.
<property name="src" location="src"/>
设
置一个名字
为
src
的属性,它的
值
是一个路径,用
location
设
置。如果
location
内容以
/
或
\
或
D:\ C:\
之
类开
始,表示
绝对
路径,否
则
表示相
对
路径,相
对
于
project
中
设
置的
basedir.
使用
path
或
classpath
可以
设
置
类
的路径,后面引用
时
用
id
设
置的
值
构建工程最常用的
ant
内置任
务
:
mkdir
:
创
建目
录
,
dir=
要
创
建的目
录
delete:
删
除文件或文件
夹
dir=
要
删
除的文件或文件
夹
javac:
编译
java
源文件,
java
源文件放在
srcdir
指定的文件
夹
中,生成的
.class
文件按照
package
语
句
组织
目
录
,存放在
destdir
指定的文件
夹
中。要注意源文件的目
录组织
要与
package
语
句相一致
war:
为
web
应
用程序打包,
destfile
指定打包后生成的文件名,
webxml
指定所用的
web.xml
文件。
<fileset dir="${basedir}"/>
将
basedir
目
录
下所有的文件也放在包中
上面的
build.xml
例子中,
target
中的属性
depends
表示在
执
行本
target
之前必
须
要做的
target,
例如
dist
的
depends=compile,
意思是在用
dist
打包之前必
须
先用
compile
编译
。
这样
当
执
行
dist
时
首先
执
行
compile
/**********************************************************************/
description
元素和
description
属性,它们可用于提供更结构化的注释。
<property name="metal" value="beryllium"/>
例如,为了使用这样一个值,它是另一个属性的值的组成部分,您会将标签写为下面这样:
<property name="metal-database" value="${metal}.db"/>
定义依赖关系
<target name="preprocess" depends="init"/>
下面是
Ant
中
jar
任务的一个简单使用例子:
<jar destfile="package.jar" basedir="classes"/>
这将创建一个名为
package.jar
的
JAR
文件,并把
classes
目录中的所有文件添加到其中(
JAR
还可以配置
tstamp
任务来设置不同的属性,应用一个当前时间之前或之后的时间偏移,或以不同
的方式格式化该字符串。所有这些都是使用一个嵌套的
format
元素来完成的,如下所示:
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
上面的清单将
OFFSET_TIME
属性设置为距离当前时间
10
分钟之后的小时数、分钟数和秒数。
<mkdir dir="archive/metals/zinc"/>
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
<move file="src/Test.java" tofile="src/TestCopy.java"/>
<replace file="input.txt" token="old" value="new"/>
<gzip src="output.tar" zipfile="output.tar.gz"/>
<unzip src="output.tar.gz" dest="extractDir"/>
如果我们想要使用一个模式,可以将
file
属性替换为一个
fileset
元素,如下所示:
<copy todir="archive">
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
fileset
默认情况下包含指定
src
目录下的所有文件,因此为了仅选择
Java
文件,我们对模式使
用一个
include
元素。类似地,我们可以对另一个模式添加一个
exclude
元素,从而潜在地排除
include
指定的匹配项。甚至可以指定多个
include
和
exclude
元素;这样将得到一组文件和目录,
它们包含
include
模式的所有匹配项的并集,但排除了
exclude
模式的所有匹配项。
下面是一个文件集的例子,它仅选择那些大于
512
字节并且包含字符串“
hello
”的文件。
<fileset dir="dir">
<and>
<contains text="hello"/>
<size value="512" when="more"/>
</and>
</fileset>
下面是从
CVS
知识库提取模块的一个例子生成文件:
<?xml version="1.0"?>
<project name="CVS Extract" default="extract" basedir=".">
<property name="cvsRoot" value="
:pserver:anonymous@dev.eclipse.org:/home/eclipse
"/>
<target name="extract">
<cvs cvsRoot="${cvsRoot}"
package="org.eclipse.swt.examples"
dest="${basedir}"/>
</target>
</project>
/*************************************************************************
3.
运行
ant:
使用
ant.bat
可以直接运行
ant,
如果不
带
任何参数,
ant
会在当前路径下搜索
build.xml
文件,如果找到,就运行
project
的
default
指定的
target.
也可以
带
参数来
选择
build.xml
文件和要运行的
target
对
于上面的例子
,
假定
build.xml
所在的目
录为
D:\struts_demo\ ,
则
下面三
种执
行方式效果是一
样
的:
1. cd d:\struts_demo
ant
2. ant -buildfile d:\struts_demo\build.xml
3. ant -buildfile d:\struts_demo\build.xml dist
如果
执
行
ant -buildfile d:\struts_demo\build.xml compile,
则执
行
compile target
有
关
ant
使用和
build.xml
文件内容,在
ant
的
manual
中有
详细
的描述。
作者的其他文章
·
开
源中
间
件介
绍
·
中国人自己的
开
源
项
目!
[
已
经
收
录
了三个
项
目
]
·
JAVA
常用
类
的使用方法
·
JDom
使用
详
解
·
《
Ajax
技
术
地
图
》的演
讲录
音下
载
·
我能
为开
源做些什
么
?
·
Ajax OpenDoc
放出
·
Web2.0
三大特性
·
离
线
BLOG
·
MSN
开
博一年,特此
纪
念
more..
其他相
关
文章
more...
·
技
术
:
"JSP"
"XML"
"JDK"
"WAR"
"JAR"
·
产
品
:
"Tomcat"
"Ant"
"Struts"
·
人物:
·
企
业
:
"Apache"
1.
如何写出没有
bug
的程序?
2.
《分析模式》笔
记
之分析手段
3.
《
Ajax
技
术
地
图
》的演
讲录
音下
载
4.
神奇的
javaScript
实现
的无需服
务
器支持的
WIKI
5.
用
开
源
组
件
jcaptcha
做
jsp
彩色
验证码
6.
如果更好的通
过
p2p
网
络观
看世界杯
.
7.
《分析模式》笔
记
之
责
任模式与合同模式
8.
Web2.0
三大特性
9.
各
类开
源
协议
介
绍
10.
Oracle
在
JavaOne
大会上勾勒
SOA 2.0
远
景
11.
《分析模式》笔
记
之
帐
目模式与
观测
模式
12.
Ajax OpenDoc
放出
13.
开
源
JBoss
牵
手
Sun
成
NetBeans
合作伙伴
14.
对
比三个
语
言的
虚函数与抽象函数的区
别
15.
世界杯与国
产开
源
(
二
)
1.
Sun's Peder Ulander Talks with SYS-CON.TV at JavaOne 2006
2.
CowNew
开
源-巧用
SQL
实现
离散数据分析
3.
再
说说
prototype.js
的事件注册
4.
EasyJFCMS
项
目正式启
动
,
诚
邀国内
开
源
爱
好者加入
(
附
uml
图
)
5.
Infragistics
的
JSF
组
件
6.
编码讨论
---
乱
码问题
之
终
极解决
7.
《
Ajax
技
术
地
图
》的演
讲录
音下
载
8.
MyEclipse+WebSphere
通
过
JNDI
连
接
Sybase
简
介
9.
第三次
BEA UG
活
动讲义
下
载
10.
我能
为开
源做些什
么
?
11.
历
史上
编
程方法的
发
展
12.
Ajax OpenDoc
放出
13.
用
调
用者与被
调
用者的角度看
组
件与
设计
模式
14.
Web2.0
三大特性
15.
离
线
BLOG