简介
Apache Ant是一个基于Java的编译工具。它从功能上类似于make,但它以克服了make的缺点。
为什么在Make, Gnumake, Nmake, Jam这些编译工具后,还要产生一个Ant呢?因为这些编译工具都有一定的限制。Ant的最初开发者在开发跨平台的应用时,发现以前的那些开发工具都有一定的限制。例如Make工具,它是基于Shell的,它判断一系列的条件,并像在Shell下面那样执行编译命令,这样做的好处的:针对特定的平台(如unix),可以容易的利用这些工具做编译;但同时,这也意味着,你的编译限制在固定的操作系统下,如只能用于unix。
同时,Make文件也有一些先天的缺陷。好多人都会遇到恐怖的tab问题。Ant的最初开发者多次说“我的命令不能执行因为我在tab前面加了一个空格!”。一些工具如Jam一定程序上解决了这个问题,但仍有其它的格式问题。
Ant与从基于命令的那些扩展开来的那些工具不同,Ant是由Java类扩展的。不用编写shell命令,而是配置基于XML的文件,形成多个任务的目标配置树。每一个任务都是通过一个实现了一个规定接口的Java类来运行的。
Ant缺少了一些直接执行shell命令的能力,如find . -name foo -exec rm {},但它给用户提供了跨平台的能力,可以在任何地方工作。实际上,Ant也提供了命令execute用来执行shell命令,这就是它的<exec>任务,它允许执行基于操作系统的命令。
优点
- 跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性;
- 操作简单:Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件 是XML格式的文件,所以很容易维护和书写,而且结构很清晰;
- Ant可以集成到开发环境中:由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
开发
- Ant的构建文件
- src存放文件;
- class存放编译后的文件;
- lib存放第三方JAR包;
- dist存放打包,发布以后的代码。
- Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定 义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调 用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类:
- 核心任务:核心任务是Ant自带的任务;
- 可选任务:可选任务是来自第三方的任务,因此需要一个附加的JAR文件;
- 用户自定义的任务:用户自定义的任务是用户自己开发的任务。
标签
- <project>标签
- default表示默认的运行目标,即指定默认的target(即任务)。这个属性是必须的;
- basedir表示项目的基准目录;
- name表示项目名;
- description表示项目的描述。
- <target>标签
- name表示目标名,这个属性是必须的;
- depends表示依赖的目标;
- if表示仅当属性设置时才执行;
- unless表示当属性没有设置时才执行;
- description表示项目的描述。
- <mkdir>标签
1
|
<mkdir dir
=”
$
{class
.root
}”
/>
|
- <jar>标签
- destfile表示JAR文件名;
- basedir表示被归档的文件名;
- includes表示被归档的文件模式;
- excludes表示被排除的文件模式。
- <javac>标签
- srcdir表示源程序的目录;
- destdir表示class文件的输出目录;
- include表示被编译的文件的模式;
- excludes表示被排除的文件的模式;
- classpath表示所使用的类路径;
- debug表示包含的调试信息;
- optimize表示是否使用优化;
- verbose 表示提供详细的输出信息;
- fileonerror表示当碰到错误就自动停止。
- <java>标签
- classname 表示将执行的类名;
- jar表示包含该类的JAR文件名;
- classpath所表示用到的类路径;
- fork表示在一个新的虚拟机中运行该类;
- failonerror表示当出现错误时自动停止;
- output 表示输出文件;
- append表示追加或者覆盖默认文件。
- <delete>标签
- /file表示要删除的文件;
- dir表示要删除的目录;
- includeEmptyDirs 表示指定是否要删除空目录,默认值是删除;
- failonerror 表示指定当碰到错误是否停止,默认值是自动停止;
- verbose表示指定是否列出所删除的文件,默认值为不列出。
- <copy>标签
- file 表示源文件;
- tofile 表示目标文件;
- todir 表示目标目录;
- overwrite 表示指定是否覆盖目标文件,默认值是不覆盖;
- includeEmptyDirs 表示指定是否拷贝空目录,默认值为拷贝;
- failonerror 表示指定如目标没有发现是否自动停止,默认值是停止;
- verbose 表示制定是否显示详细信息,默认值不显示。
- <exec>执行文件
1
2
|
<execexecutable="${base.dir}/email.bat" >
</exec>
|