Apache Ant
ANT代表Another Neat Tool。 它是Apache的基于Java的构建工具。 在深入了解Apache Ant的细节之前,让我们先了解为什么我们首先需要构建工具。
需要构建工具
平均而言,开发人员花费大量时间执行构建和部署等普通任务,其中包括:
- 编译代码
- 打包二进制文件
- 将二进制文件部署到测试服务器
- 测试更改
- 将代码从一个位置复制到另一个位置
要自动化和简化上述任务,Apache Ant非常有用。 它是一个可以从命令行执行的操作系统构建和部署工具。
Apache Ant的历史
- Ant由James Duncan Davidson(Tomcat的原作者)创建。
- 它最初用于构建Tomcat,并作为Tomcat发行版的一部分捆绑在一起。
- Ant诞生于与Apache Make工具相关的问题和复杂性。
- Ant于2000年被提升为Apache的独立项目。截至2014年5月,Apache Ant的最新版本为1.9.4。
Apache Ant的功能
- Ant是最完整的Java构建和部署工具。
- Ant是平台中立的,可以处理特定于平台的属性,例如文件分隔符。
- Ant可用于执行特定于平台的任务,例如使用“touch”命令修改文件的修改时间。
- Ant脚本使用纯XML编写。 如果您已经熟悉XML,则可以快速学习Ant。
- Ant善于自动执行复杂的重复性任务。
- Ant附带了大量预定义任务。
- Ant提供了一个开发自定义任务的界面。
- 可以从命令行轻松调用Ant,它可以与免费和商业IDE集成。
Ant - Environment Setup
Apache Ant Ant是在Apache软件许可下发布的,这是一个由开源计划认证的完全开源的许可证。
最新的Apache Ant版本,包括其完整源代码,类文件和文档,可以在http://ant.apache.org.找到http://ant.apache.org.
安装Apache Ant
假设您已经在计算机上下载并安装了Java Development Kit(JDK)。 如果没有,请按照here的说明操作。
- 确保将JAVA_HOME环境变量设置为安装JDK的文件夹。
- 从http://ant.apache.org下载二进制文件
- 将zip文件解压缩到方便的位置c:\文件夹。 使用Winzip,winRAR,7-zip或类似工具。
- 创建一个名为ANT_HOME的新环境变量,该变量指向Ant安装文件夹,在本例中为c:\apache-ant-1.8.2-bin文件夹。
- 将Apache Ant批处理文件的路径附加到PATH环境变量。 在我们的例子中,这将是c:\apache-ant-1.8.2-bin\bin文件夹。
验证Apache Ant安装
要验证在计算机上成功安装Apache Ant,请在命令提示符下键入ant。
您应该看到类似于的输出:
C:\>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010
123
如果您没有看到上述输出,请确认您已正确执行安装步骤。
安装Eclipse
本教程还介绍了Ant与Eclipse IDE的集成。 因此,如果您尚未安装Eclipse,请下载并安装Eclipse
要安装Eclipse:
- 从www.eclipse.org下载最新的Eclipse二进制文件
- 将Eclipse二进制文件解压缩到一个方便的位置,例如c:\folder
- 从c:\eclipse\eclipse.exe运行Eclipse
Ant - Build Files
通常,Ant的构建文件(称为build.xml应驻留在项目的基本目录中。 但是,文件名或其位置没有限制。 您可以自由使用其他文件名或将构建文件保存在其他位置。
在本练习中,在计算机的任何位置创建一个名为build.xml的文件,其中包含以下内容:
<?xml version="1.0"?><project name="Hello World Project" default="info"><target name="info"><echo>Hello World - Welcome to Apache Ant!</echo></target>
</project>
1234567
请注意,在xml声明之前不应有空行或空格。 如果您允许它们,执行ant构建时会出现以下错误消息 -
The processing instruction target matching “[xX][mM][lL]” is not allowed. 所有构建文件都需要project元素和至少一个target元素。
XML元素project有三个属性:
属性 | 描述 |
---|---|
name | 项目名称。 (可选的) |
default | 构建脚本的默认目标。 项目可能包含任意数量的目标。 此属性指定应将哪个目标视为默认目标。 (必须) |
basedir | 基本目录(或)项目的根文件夹。 (可选的) |
目标是您希望作为一个单元运行的任务集合。 在我们的示例中,我们有一个简单的目标来向用户提供信息性消息。
目标可以依赖于其他目标。 例如, deploy目标可能具有对package目标的依赖性, package目标可能具有对compile目标的依赖性等等。 依赖关系使用depends属性表示。 例如:
<target name="deploy" depends="package">....
</target>
<target name="package" depends="clean,compile">....
</target>
<target name="clean" >....
</target>
<target name="compile" >....
</target>
12345678910111213
target元素具有以下属性:
属性 | 描述 |
---|---|
name | 目标名称(必填) |
depends | 以逗号分隔的目标所依赖的所有目标的列表。 (可选的) |
description | 目标的简短描述。 (可选的) |
if | 允许基于条件属性的真实性执行目标。 (可选的) |
unless | 将目标添加到指定Extension Point的依赖项列表中。 扩展点类似于目标,但它没有任何任务。 (可选的) |
上例中的echo任务是一个打印消息的简单任务。 在我们的示例中,它打印消息Hello World 。
要运行ant构建文件,请打开命令提示符并导航到build.xml所在的文件夹,然后键入ant info 。 你也可以输入ant 。 两者都可以,因为info是构建文件中的默认目标。 您应该看到以下输出:
C:\>ant
Buildfile: C:\build.xml
info: [echo] Hello World - Welcome to Apache Ant!
BUILD SUCCESSFUL
Total time: 0 seconds
C:\>
1234567
Ant - Property Task
Ant构建文件是用XML编写的,它不允许像你喜欢的编程语言那样声明变量。 但是,正如您可能想象的那样,如果Ant允许声明项目名称,项目源目录等变量,那将非常有用。
Ant使用property元素,允许您指定属性。 这允许将属性从一个构建更改为另一个或从一个环境更改为另一个。
默认情况下,Ant提供以下可在构建文件中使用的预定义属性:
属性 | 描述 |
---|---|
ant.file | 构建文件的完整位置。 |
ant.version | Apache Ant安装的版本。 |
basedir | 构建的基础,在project元素的basedir属性中指定。 |
ant.java.version | Ant使用的JDK版本。 |
ant.project.name | 项目name ,在project元素的name atrribute中指定。 |
ant.project.default-target | 当前项目的默认目标。 |
ant.project.invoked-targets | 以逗号分隔的当前项目中调用的目标列表。 |
ant.core.lib | Ant jar文件的完整位置。 |
ant.home | Ant安装的主目录。 |
ant.library.dir | Ant库文件的主目录 - 通常是ANT_HOME/lib文件夹。 |
Ant还使构建文件可以使用系统属性(示例:file.separator)。
除上述内容外,用户还可以使用property元素定义其他属性。 以下示例显示如何定义名为sitename的属性:
<?xml version="1.0"?>
<project name="Hello World Project" default="info"><property name="sitename" value="www.iowiki.com"/><target name="info"><echo>Apache Ant version is ${ant.version} - You are at ${sitename} </echo></target>
</project>
123456789
在上面的构建文件上运行Ant会产生以下输出:
C:\>ant
Buildfile: C:\build.xml
info: [echo] Apache Ant version is Apache Ant(TM) version 1.8.2 compiled on December 20 2010 - You are at www.iowiki.com
BUILD SUCCESSFUL
Total time: 0 seconds
C:\>
12345678
Ant - Property Files
如果您正在使用一些属性,则直接在构建文件中设置属性是可以的。 但是,对于大型项目,将属性存储在单独的属性文件中是有意义的。
将属性存储在单独的文件中具有以下优点:
- 它允许您重用相同的构建文件,并为不同的执行环境使用不同的属性设置。 例如,可以为DEV,TEST和PROD环境单独维护构建属性文件。
- 当您事先不知道属性(在特定环境中)的值时,它很有用。 这允许您在已知属性值的其他环境中执行构建。
没有硬性规则,但通常属性文件名为build.properties并且与build.xml文件并排放置。 您可以基于部署环境创建多个构建属性文件 - 例如build.properties.dev和build.properties.test.
build属性文件的内容类似于普通的java属性文件。 它们每行包含一个属性。 每个属性由名称和值对表示。 名称和值对由等号(=)分隔。 强烈建议使用适当的注释对属性进行注释。 使用散列(#)字符列出注释。
以下示例显示了build.xml文件及其关联的build.properties文件:
build.xml
<?xml version="1.0"?>
<project name="Hello World Project" default="info"><property file="build.properties"/><target name="info"><echo>Apache Ant version is ${ant.version} - You are at ${sitename} </echo></target>
</project>
123456789
build.properties
# The Site Name
sitename=www.iowiki.com
buildversion=3.3.2
1234
在上面的示例中, sitename是一个自定义属性,映射到网站名称。 您可以以这种方式声明任意数量的自定义属性。 上面示例中列出的另一个自定义属性是buildversion ,在本例中,它指的是构建版本。
除了上述内容之外,Ant还提供了许多预定义的构建属性,这些属性在上一节中列出,但在下面再次表示。
属性 | 描述 |
---|---|
ant.file | 构建文件的完整位置。 |
ant.version | Apache Ant安装的版本。 |
basedir | 构建的基础,在project元素的basedir属性中指定。 |
ant.java.version | Ant使用的JDK版本。 |
ant.project.name | 项目name ,在proje |