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
分享到:
相关推荐
"ant教程详解--javac,java,jar,war,delete,copy,mkdir....ziw"这则教程可能详细解析了ANT中与Java开发密切相关的任务,如编译源代码(javac)、运行Java程序(java)、创建JAR和WAR包、删除文件或目录(delete...
通过阅读提供的"ant教程详解--javac,java,jar,war,delete,copy,mkdir...(转载).doc"文档和"ant.pdf",你可以深入理解这些任务的使用方法和实际应用场景,从而更好地将Ant应用于你的Java项目中。
4. **task** 元素:Ant的核心在于任务,它们执行实际的工作,如`javac`用于编译Java源代码,`jar`用于创建JAR文件,`copy`用于复制文件,`delete`用于删除文件等。每个任务都有特定的属性和子元素。 5. **classpath...
### 使用Ant构建WAR包详解 在Java开发领域中,Ant是一种非常流行的自动化构建工具,它可以帮助开发者自动完成项目构建过程中的各种任务,如编译、测试、打包等。本篇文章将详细阐述如何使用Ant来构建WAR(Web ...
### ant标签详解 #### 1. `<project>` 标签 `<project>` 标签是构建文件的基础,每一个构建文件都有一个对应的项目,并且此标签作为构建文件的根节点。`<project>` 标签支持多种属性: - **default**:指定构建...
<copy file="${war.dir}/Basic_Struts2_Ant.war" todir="/path/to/your/tomcat/webapps/"/> <delete dir="${build.dir}"/> ``` 最后,运行Ant构建文件,通过`ant war`命令生成war文件,然后将其部署到...
|-- Example.java |-- WebRoot |-- jsp |-- Test.jsp |-- WEB-INF |-- lib |-- web.xml |-- build.xml ``` 在这个结构中,“example”是整个项目的根目录。“src”目录包含了项目的源代码,“WebRoot”则是...
- 示例:编译 `src` 目录下的所有 `.java` 文件,并将 `.class` 文件输出到 `e:\a` 目录:`<javac srcdir="src" destdir="e:\a" classpathref="mylib"/>` 其中 `mylib` 定义了类路径。 - **java**: 运行Java程序。 ...
任务由一系列的标签组成,如`<javac>`用于编译Java源码,`<jar>`用于打包JAR文件,`<delete>`用于删除文件等。 4. **目标(Targets)**:目标是Ant中的一个可执行单元,由一系列的任务组成。每个目标都有一个唯一的...
- `<copy file="src/Test.java" todir="archive"/>` 复制文件到指定目录。 - `<move file="src/Test.java" tofile="src/TestCopy.jar"/>` 移动文件到指定位置。 4. **压缩与解压缩(zip/gzip/bzip2 tasks)**: ...