您的位置:首页 > 编程语言 > Java开发

ant教程详解 --javac,java,jar,war,delete,copy,mkdir...

2010-07-12 11:06 387 查看
Ant
是一个

Apache
基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将
Ant
应用到
Java
项目中,让它简化构建和部署操作。

一.


安装与配置


下载地址: http://ant.apache.org/
,在本文中下载的是
1.7.0
版本。解压到某个目录(例如
E:"apache-ant-1.7.0
),即可使用。

添加系统环境变量:
ANT_HOME
,该变量指向
Ant
解压后的根目录,在此为
E:"apache-ant-1.7.0


安装与配置完毕后,读者可以测试一下
Ant
是否可用,首先进入
Ant

bin
目录,运行命令
ant –version
,若安装和配置成功,则会显示
Ant
版本信息,如下图所示:

由上可以看出,读者运行
Ant
的命令时,需要进入到
Ant

bin
目录,如何才能让系统自动找到
Ant
呢?这时需要读者在系统环境变量
path
中添加
Ant

bin
目录。设置完成后,我们就可以在任何目录(例如
C:"Documents and Settings"AmigoXie
目录)输入
Ant
的命令,来获得命令的运行结果。

二.


Ant

的关键元素


Ant
的构件文件是基于
XML
编写的,默认名称为
build.xml
。为了更清楚的了解
Ant
,在这里编写一个简单的
Ant
程序,用来展现
Ant
的功能,让读者对
Ant
有一个初步的了解。首先在
E
盘下建立一个
build.xml
文件,内容如下:

<?
xml version="1.0"
?>

<
project
name
="helloWorld">

<
target
name
="sayHelloWorld">

<
echo
message
="Hello,Amigo"/>

</
target
>

</
project
>

读者可以进入
E
盘,然后运行
ant sayHelloWorld
,可以看到如下的运行结果:

其中
sayHelloWorld
为需要执行的任务的名称。如果文件名不为
build.xml
,而为
hello.xml
时,读者运行同样的命令时,命令窗口会出现如下错误:

Buildfile:
build.xml does not exist!

Build
failed

由上面的命令的错误提示可以看出,
ant
命令默认寻找
build.xml
文件。若文件名为
hello.xml
时,读者还需要对命令做少许改变,改为:
ant –f hello.xml sayHelloWorld

ant –buildfile hello.xml sayHelloWorld

ant –file hello.xml sayHelloWorld


接下来开始向读者讲解本节的重点:
Ant
的关键元素
project

target

property

task


1.


project

元素


project
元素是
Ant
构件文件的根元素,
Ant
构件文件至少应该包含一个
project
元素,否则会发生错误。在每个
project
元素下,可包含多个
target
元素。接下来向读者展示一下
project
元素的各属性。

1



name

属性


用于指定
project
元素的名称。

2



default

属性


用于指定
project
默认执行时所执行的
target
的名称。

3



basedir

属性


用于指定基路径的位置。该属性没有指定时,使用
Ant
的构件文件的附目录作为基准目录。

下面给读者一个简单的例子来展示
project
的各元素的使用。修改
E:"build.xml
文件,修改后的内容如下:

<?
xml version="1.0"
?>

<
project
name
="projectStudy"
default
="sayBaseDir"
basedir
="E:"
apache-ant-1.7.0"
>

<
target
name
="sayBaseDir">

<
echo
message
="The base dir is: ${basedir}"/>

</
target
>

</
project
>

从上面的内容我们可以看出,在这里定义了
default
属性的值为
sayBaseDir
,即当运行
ant
命令时,若未指明执行的
target
时,默认执行的
target

sayBaseDir
,同时还定义了
basedir
属性的值为
E:"apache-ant-1.7.0
,进入
E
盘后运行
ant
命令,可看到运行的结果,如下图所示:

因为设定了
basedir
的值,所以
basedir
属性的值变成了读者设置的值。读者可以自行将
project
元素的
basedir
属性去掉后运行
ant
看看运行结果,此时
basedir
的值变成了
E:"
,即为
Ant
构件文件的父目录。

有的时候,读者可能有这种需求,即想得到某个
project
下所有的
target
的名称,读者可以通过在
ant
命令里加上
-proecthelp
来达到该目的。例如针对上述的例子我们运行
ant –projecthelp
,输出结果如下:

Buildfile:
build.xml

Main
targets:

Other
targets:

sayBaseDir

Default
target: sayBaseDir

2.


target

元素


它为
Ant
的基本执行单元,它可以包含一个或多个具体的任务。多个
target
可以存在相互依赖关系。它有如下属性:

1



name

属性


指定
target
元素的名称,这个属性在一个
project
元素中是唯一的。我们可以通过指定
target
元素的名称来指定某个
target


2



depends

属性


用于描述
target
之间的依赖关系,若与多个
target
存在依赖关系时,需要以“
,
”间隔。
Ant
会依照
depends
属性中
target
出现的顺序依次执行每个
target
。被依赖的
target
会先执行。

3



if

属性


用于验证指定的属性是否存在,若不存在,所在
target
将不会被执行。

4



unless

属性


该属性的功能与
if
属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在
target
将会被执行。

5



description

属性


该属性是关于
target
功能的简短描述和说明。

下面带领读者来看一个各属性综合使用的例子。修改
E:"build.xml
文件,修改后的内容如下:

<?
xml version="1.0"
?>

<
project
name
="targetStudy">

<
target
name
="targetA"
if
="ant.java.version">

<
echo
message
="Java Version: ${ant.java.version}"/>

</
target
>

<
target
name
="targetB"
depends
="targetA"
unless
="amigo">

<
description
>

a depend example!

</
description
>

<
echo
message
="The base dir is: ${basedir}"/>

</
target
>

</
project
>

进入
E
盘后运行
ant targetB
,可看到如下图所示的运行结果:

读者分析结果后可以看到,我们运行的是名为
targetB

target
,因该
target
依赖于
targetA
,所以
targetA
将首先被执行,同时因为系统安装了
java
环境,所以
ant.java.version
属性存在,执行了
targetA
这个
target
,输出信息:
[echo] Java Version: 1.5

targetA
执行完毕后,接着执行
targetB
,因为
amigo
不存在,而
unless
属性是在不存在时进入所在的
target
的,由此可知
targetB
得以执行,输出信息:
The base dir is: E:"


3.


property

元素


该元素可看作参量或者参数的定义,
project
的属性可以通过
property
元素来设定,也可在
Ant
之外设定。若要在外部引入某文件,例如
build.properties
文件,可以通过如下内容将其引入:
<property file=” build.properties”/>

property
元素可用作
task
的属性值。在
task
中是通过将属性名放在“
${
”和“
}
”之间,并放在
task
属性值的位置来实现的。

Ant
提供了一些内置的属性,它能得到的系统属性的列表与
Java
文档中
System.getPropertis()
方法得到的属性一致,这些系统属性可参考
sun
网站的说明。

同时,
Ant
还提供了一些它自己的内置属性,如下:

basedir

project
基目录的绝对路径,该属性在讲解
project
元素时有详细说明,不再赘述;

ant.file

buildfile
的绝对路径,如上面的各例子中,
ant.file
的值为
E:"build.xml


ant.version

Ant
的版本,在本文中,值为
1.7.0


ant.project.name
:当前指定的
project
的名字,即前文说到的
project

name
属性的值;

ant.java.version

Ant
检测到的
JDK
的版本,在上例运行结果中可看到为
1.5


下面让读者来看一个
property
元素使用的简单例子。修改
E:"build.xml
文件,内容如下:

<?
xml version="1.0"
?>

<
project
name
="propertyStudy"
default
="example">

<
property
name
="name"
value
="amigo"/>

<
property
name
="age"
value
="25"/>

<
target
name
="example">

<
echo
message
="name: ${name}, age: ${age}"/>

</
target
>

</
project
>

该例的运行结果如下图所示:

由此读者可以看出,通过如下两个语句:

<property
name="name" value="amigo"/>

<property
name="age" value="25"/>

我们设置了名为
name

age
的两个属性,这两个属性设置后,读者在下文中可以通过
${name}

${age}
分别取得这两个属性的值。

三.


Ant

的常用任务



Ant
工具中每一个任务封装了具体要执行的功能,是
Ant
工具的基本执行单位。在本小节中,主要引导读者来看下
Ant
的常用任务及其使用举例。

1.


copy

任务


该任务主要用来对文件和目录的复制功能。举例如下:

Eg1.
复制单个文件:
<copy file="file.txt" tofile="copy.txt"/>

Eg2.
对文件目录进行复制:

<copy todir="../newdir/dest_dir">

<fileset dir="src_dir"/>

</copy>

Eg3.
将文件复制到另外的目录:

<copy
file="file.txt" todir="../other/dir"/>

2.


delete

任务


对文件或目录进行删除,举例如下:

Eg1.
删除某个文件:
<delete file="photo/amigo.jpg"/>

Eg2.
删除某个目录:
<delete dir="photo"/>

Eg3.
删除所有的备份目录或空目录:

<delete includeEmptyDirs="true">

<fileset dir="." includes="**/*.bak"/>

</delete>

3.


mkdir

任务


创建目录。
eg

<mkdir dir="build"/>

4.


move
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐