`
wangyanlong0107
  • 浏览: 480336 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Apache Ant对决Make:实战Java构建工具

阅读更多

【IT168 专稿】一谈到英语单词Ant,人们很自然的想到蚂蚁。而一谈到另一个单词Make,人们也会很自然想到构建工具。有谁会将这两个词关联起来呢?那么Ant究竟有什么神奇之处呢?本文会为您揭晓答案。

    什么是Ant
Apache Ant是一个基于Java的构建(Build)工具。理论上讲,类似Unix/Linux C程序员经常使用的Make工具。与Make相比,Ant完全由Java实现,具有跨平台的好处。

  Ant的命名来源

  至于Ant的称呼,颇有点意思。据Ant原作者James Duncan Davidson本人介绍,Ant是“Another Neat Tool”的缩写,意思是“另一个简洁的工具”,意思是比Make更简洁,适用。不过,人们更愿意接受Ant即“蚂蚁”这样的理解。众所周知,蚂蚁是动物世界赫赫有名的建筑师(ants do an extremely good job at building things);蚂蚁体格虽小,但力气超强(ants are very small and can carry a weight dozens of times their own)。

  Ant的历史

  说起Ant,就不得不说另一个Apache开源项目Tomcat。Tomcat作为轻量级Web容器,早已声名鹊起。最初,Ant其实是Tomcat的一部分,Ant的唯一目的就是build Tomcat。Ant原作者James Duncan Davidson也是Tomcat的创始人。

  不久,很多Java开源项目意识到Ant的简洁适用,更重要的是弥补Makefiles的不足。自从Jakarta以及Apache项目开始采用Ant以来, 作为构建工具,Ant就像病毒一样,传播到各种各样的项目。

  2000年1月,Ant脱离了Tomcat,成为独立的Apache开源项目,由独立的CVS模块维护,正式更名为Apache Ant。2000年7月,Apache Ant的第一个版本1.1正式亮相。截至笔者发稿时,Apache Ant的最新版本为1.8.2,发布日期为2010年12月27日。点击http://ant.apache.org/bindownload.cgi下载最新版本。

  Ant的安装

  在简单介绍Ant的相关背景之后,我们以Windows平台为例,介绍如何安装Ant。

  为顺利安装Ant,请确保Java版本在1.4以上,推荐1.5。为确保Ant功能全部可用,请使用JDK,不推荐使用JRE。

  •   第一种方式是选择Windows installer for Apache Ant自动安装,默认Ant安装目录为C:\Program Files\WinAnt 。并自动创建环境变量ANT_HOME与PATH,指向Ant根目录。这种方式的特点是简单、迅速。
  •   第二种方式是手工安装。具体方法如下:

  1. 下载。如前述所,从ANT Binary Page(http://ant.apache.org/bindownload.cgi)下载Ant二进制安装包a.zip。解压后目录如下:

  bin – 公共的二进制文件,以及运行脚本

  build – 临时创建的文件,如.class文件

  dist – 目标输出文件,如.jar文件

  docs – 文档

  lib – 需要导出的jar包

  src – 源文件

  2. 指定ANT_HOME变量。打开控制面板 -> 系统 –> 高级 –> 环境变量。创建用户变量ANT_HOME,值为zip包解压路径。例如:

  变量名:”ANT_HOME”

  变量值:"C:\Program Files\Apache Software Foundation\apache-ant-1.8.1"


 3. 将ANT_HOME加入PATH变量。

  变量名:" PATH"

  变量值:" ;%ANT_HOME%\bin"

  4. 创建用户变量JAVA_HOME,值为Java安装目录。例如:

  变量名:”JAVA_HOME”

  变量值:"C:\Program Files\Java\jdk1.6.0_21"

  创建用户变量JAVA_HOME,值为Java安装目录。JAVA_HOME = C:\Program Files\java\jdk1.6.0_02

  5. 将JAVA_HOME加入PATH变量。

  变量名:" PATH"

  变量值:" ;%JAVA_HOME%\bin"

  相比于前一种,第二种方式更加灵活。

  无论哪种方式,可以使用下列办法确保安装成功,

  • 使用javac –version检查Java环境是否正确。返回值应为:javac 1.6.0_21

  • 使用ant –version检查Ant环境是否正确。返回值应为:Apache Ant version 1.8.1 compiled on April 30 2010。

  如图所示:

  如果遇到安装错误,请参见Apache Ant官方网站:http://ant.apache.org/problems.html

  第一个Ant示例

  假设我们创建一个Java工程HelloWorld,将源文件.java存放在src目录,编译后的字节码.class存放在bin目录,对应的jar包存放在exe目录,结构如下图:

  HelloWorld.java清单如下:



  
public class HelloWorld {

  
public static void main(String[] args) {

  System.out.println(
" Hello World ");

  }

  }

 


    我们分别采用命令行与Ant两种不同的build方式。

  1. 命令行

  首先,创建src目录:  

md src

  其次,创建bin目录,编译并运行:

  md bin

  javac 
-sourcepath src -d bin\ src\HelloWorld.java

  java 
-cp bin HelloWorld

  再次,创建exe目录,创建jar包,包含创建manifest文件,exe目录,jar打包。一个命令就可以搞定: 

echo Main-Class: HelloWorld>MonManifest md exe jar cfm exe\HelloWorld.jar MonManifest -C bin .

  最后,运行工程:

java -jar exe\HelloWorld.jar

  2. Ant

  Ant的构建脚本文件build file是使用XML语言编写,下文我们简称为build.xml。build.xml包含一个标准的根节点Project,表示一个工程。每个build文件只允许定义一个Project元素。Project定义至少1个或多个Target,表示不同的模块。而Target又是一些列Task的集合,而每一个Task是一段可执行的代码。三者的关系如图表示。更多细节,请参见Apache Ant官方网站:http://ant.apache.org

  我们使用Ant来build工程HelloWorld。build.xml包含4个target:clean,compile,jar,run。

  clean

  clean清除所有的编译文件以及相关目录,这里为目录bin以及exe。

< target name = ” clean ” >

  
< delete dir = ” bin ” / >

  
< delete dir = ” exe ” / >

  
< /target >

  compile

  compile创建目录bin,编译src目录源文件,生成的.class文件放在bin目录。

< target name = ” compile ” >

  
< mkdir dir = ” bin ” / >

  
< javac srcdir = ” src ” destdir = ” bin ” / >

  
< /target >

  jar

  jar创建目录exe,打包jar。使用manifest元素可轻松创建manifest文件。

< target name = ” jar ” >

  
< mkdir dir = ” exe ” / >

  
< jar destfile = ” exe/HelloWorld.jar ” basedir = ” bin ” >

  
< manifest >

  
< attribute name = ” Main-Class ” value = ” HelloWorld ” / >

  
< /manifest >

  
< /jar >

  
< /target >

  run

  run 运行jar。 

< target name = ” run ” >

  
< java jar = ” exe/HelloWorld.jar ” fork = ” true ” / >

  
< /target >

  需要指出的是,以上4个target的执行顺序上有依赖关系的。例如jar依赖于compile,run依赖于jar。Ant提供了属性depends来描述target之间的依赖关系。举个例子,假设执行D,由于D依赖于C,C依赖于B,B依赖于A,因此,从顺序上,先执行A,其次B,然后C,最后D。每个Target最多只能被执行一遍。

< target name = ” A ” / >

  
< target name = ” B ” depends = “ A “ / >

  
< target name = ” C ” depends = “ B “ / >

  
< target name = ” D ” depends = “ C,B,A “ / >

  对于我们的工程HelloWorld。可以运行下列Ant命令。

ant clean

  ant compile

  ant jar

  ant run

  当然,可以简单地运行

ant run

  build.xml清单如下:

 < project default = ” run ” >

  
< property name = ” src.dir ” value = ” src ” / >

  
< property name = ” bin.dir ” value = ” bin ” / >

  
< property name = ” jar.dir ” value = ” exe ” / >

  
< property name = ” main-class ” value = ” HelloWorld ” / >

  
< target name = ” clean ” >

  
< delete dir = ” ${bin.dir} ” / >

  
< delete dir = ” ${jar.dir} ” / >

  
< echo message = ” nettoyage termine ” / >

  
< / target >

  
< target name = ” compile ” depends = ” clean ” >

  
< mkdir dir = ” ${bin.dir} ” / >

  
< javac srcdir = ” ${src.dir} ” destdir = ” ${bin.dir} ” / >

  
< echo message = ” compilation terminee ” / >

  
< / target >

  
< target name = ” jar ” depends = ” compile ” >

  
< mkdir dir = ” ${jar.dir} ” / >

  
< jar destfile = ” ${jar.dir}/sdf.jar ” basedir = ” ${bin.dir} ” >

  
< manifest >

  
< attribute name = ” Main-Class ” value = ” ${main-class} ” / >

  
< / manifest >

  
< / jar >

  
< echo message = ” Creation du fichier Jar terminee ” / >

  
< / target >

  
< target name = ” run ” depends = ” jar ” >

  
< java jar = ” ${jar.dir}/sdf.jar ” fork = ” true ” / >

  
< / target >

  
< / project >

  Eclipse提供Ant视图,可以很方便查看与编辑Ant脚本,如图:

  Ant API

  Ant的强大之处在于,不仅可以调用Ant脚本进行各种文件部署、管理工作,也可以调用Ant丰富的API,甚至扩展Ant API编程。举几个例子:

  1. 创建目录:

Project prj=new Project();

  Mkdir mkdir
=new Mkdir();

  mkdir.setProject(prj);

  mkdir.setDir(
new File("src"));

  mkdir.execute();

  2. 将class文件打成jar包

Project prj = new Project();

  Jar jar 
= new Jar();

  jar.setProject(prj);

  jar.setDestFile(
new File("HelloWorld.jar"));

  FileSet fileSet 
= new FileSet();

  fileSet.setProject(prj);

  fileSet.setDir(
new File("bin"));

  fileSet.setIncludes(
"**/*.class");

  jar.addFileset(fileSet);

  jar.execute();

  创建自己的Task

  Apache Ant允许用户自定义Task,步骤如下:

  1. 创建一个类,继承org.apache.tools.ant.Task

  2. 对于每一个Attribute,需要实现标准的Java bean规范的set方法。

  3. 如果创建的Task需要其它其它的子Task,则需要实现org.apache.tools.ant.TaskContainer接口。

  4. 如果扩展的Task需要支持Text,需要实现方法public void addText(String)。

  5. 对于每个嵌套的元素,实现create, add或者addConfigured方法。

  6. 实现public void execute()方法。

  7. 在build.xml中使用引用自定义Task。

  举个例子,我们写一个自定义的Task,目的是在Java控制台打印一条消息。该Task只有一个属性,称为message。

  源代码MyTask.java

import org.apache.tools.ant.BuildException;

  import org.apache.tools.ant.Task;

  
public class MyTask extends Task {

  
private String msg;

  
// The method executing the task

  
public void execute() throws BuildException {

  System.out.println(msg);

  }

  
// The setter for the "message" attribute

  
public void setMessage(String msg) {

  this.msg 
= msg;

  }

  }

 


 对应的build.xml

<?xml version="1.0"?>

<project name="OwnTaskExample1" default="main" basedir=".">
<taskdef name="mytask" classname="MyTask"/>

<target name="main">
<mytask message="Hello World! MyTask works!"/>
</target>
</project>

  算上MyTask的编译,完整的Ant脚本为:

<?xml version="1.0"?>

<project name="OwnTaskExample2" default="main" basedir=".">

<target name="build" >
<mkdir dir="build"/>
<javac srcdir="source" destdir="build"/>
</target>

<target name="declare" depends="build">
<taskdef name="mytask"
classname
="MyTask"
classpath
="build"/>
</target>

<target name="main" depends="declare">
<mytask message="Hello World! MyTask works!"/>
</target>
</project>

  Ant重要标签列表

  <project> 标签

  每个构建文件对应一个项目。 标签时构建文件的根标签。它可以有多个内在属性,如下:

  (1) default表示默认的运行目标,这个属性是必须的。

  (2) basedir表示项目的基准目录。

  (3) name表示项目名。

  (4) description表示项目的描述。

  <target>标签

  一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。一个target只能被执行一次, 即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。target标签其属性如下。:

  (1).name表示标明,这个属性是必须的。

  (2).depends表示依赖的目标。

  (3)if表示仅当属性设置时才执行。

  (4)unless表示当属性没有设置时才执行。

  (5)description表示项目的描述。

  <mkdir>标签

  该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:

<mkdir dir=”${class.root}”/>

 

  <jar>标签

  该标签用来生成一个JAR文件,其属性如下。

  (1) destfile表示JAR文件名。

  (2) basedir表示被归档的文件名。

  (3) includes表示别归档的文件模式。

  (4) exchudes表示被排除的文件模式。 

     <javac>标签

  该标签用于编译一个或一组java文件,其属性如下。

  (1).srcdir表示源程序的目录。

  (2).destdir表示class文件的输出目录。

  (3).include表示被编译的文件的模式。

  (4).excludes表示被排除的文件的模式。

  (5).classpath表示所使用的类路径。

  (6).debug表示包含的调试信息。

  (7).optimize表示是否使用优化。

  (8).verbose 表示提供详细的输出信息。

  (9).fileonerror表示当碰到错误就自动停止。

  <java>标签

  该标签用来执行编译生成的.class文件,其属性如下。

  (1).classname 表示将执行的类名。

  (2).jar表示包含该类的JAR文件名。

  (3).classpath所表示用到的类路径。

  (4).fork表示在一个新的虚拟机中运行该类。

  (5).failonerror表示当出现错误时自动停止。

  (6).output 表示输出文件。

  (7).append表示追加或者覆盖默认文件。

  <delete>标签

  该标签用于删除一个文件或一组文件,其属性如下。

  (1).file表示要删除的文件。

  (2).dir表示要删除的目录。

  (3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。

  (4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。

  (5).verbose表示指定是否列出所删除的文件,默认值为不列出。

  <copy>标签

  该标签用于文件或文件集的拷贝,其属性如下。

  (1).file 表示源文件。

  (2).tofile 表示目标文件。

  (3).todir 表示目标目录。

  (4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。

  (5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。

  (6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。

  (7).verbose 表示制定是否显示详细信息,默认值不显示。

  Ant调试

  Eclipse 3.1及以上版本开始支持Ant调试。以下是Eclipse用于调试的具体步骤。

  首先,在Ant脚本的target中设置断点,这个与Java文中设置断点几乎没有区别,如下图所示。但是Ant脚本不支持Hit Count与条件断点。

  接下来,通过Debug As –> Ant Build启动Ant调试。与Java调试一样,调试光标停在断点处,如下图所示。Ant支持单步断点执行命令Step Over与 Run to Line。

  除此之外,我们可以使用Debug视图查看变量值,如图所示。

  如果是远程调试,需要在Ant脚本中添加相应的参数,如下: 

<java classname="..." fork="true">
<jvmarg value="-Xdebug" />
<jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />
...
</java>

      总结

  总之,Ant具有两个突出的优点。一方面,作为一个Java应用,Ant具有跨平台的特点。另一方面,Ant脚本是标准的XML,可读性好。Eclipse对Ant脚本也提供强大的内置支持。从这个角度来说,Apache Ant无论是作为Another Neat Tool,或者蚂蚁,笔者都欣然接受。

分享到:
评论

相关推荐

    ant-1.9.1-API文档-中文版.zip

    Maven坐标:org.apache.ant:ant:1.9.1; 标签:apache、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    apache ant使用例子

    apache ant使用例子, 一个可以运行的hello ant的myelipse工程实例。

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    apache-ant-1.6.5-bin 具体详细信息察看readme.txt

    Apache Ant 与Junit 对Java工程联合测试DEMO

    Apache Ant 与Junit 对Java工程联合测试DEMO

    Apache Ant 是一个 Java 库和命令行工具,可帮助 构建软件

    Apache Ant 是一个 Java 库和命令行工具,可帮助 构建软件。

    apache ant

    apache ant安装包 apache ant安装包 apache ant安装包

    Apache Ant入门教程

    Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James Duncan Davidson 介绍,这个工具的名称是 another neat tool(另一个整洁的工具) 的首字母缩写。 生成工具在软件开发中用来将源代码和其他输入文件...

    Apache Ant 是一个 Java 库和命令行工具

    Apache Ant 是一个 Java 库和命令行工具,可帮助 构建软件。运行时至少需要 Java 8 算是比较古老的工具之一,老项目需要

    Apache Ant 教程 - 极客学院

    Ant 是一个 Apache 基金会下的跨平台的基于 Java 语言开发的构件工具。在我们详细了解 Apache Ant 之前, 让我们来讲解为什么构建工具是需要最先了解的。

    ant-1.10.1-API文档-中文版.zip

    Maven坐标:org.apache.ant:ant:1.10.1; 标签:apache、ant、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    org.apache.tools.*需要的ant.jar包

    java调用ant构建打包,java调用ant构建打包,java调用ant构建打包,java调用ant构建打包,

    Apache Ant Tutorial.pdf

    The project is a Java project and consists of many .java files. It consists of classes that are dependent on other classes and classes which are stubs or drivers, they are situated in multiple ...

    apache-ant-1.9.6

    Apache Ant安装与配置 一、解压ant安装包在D:\SWE下 二、环境变量配置 ANT_HOME D:\SWE\apache-ant-1.8.4 CLASSPATH ;%ANT_HOME%lib; PATH ;%ANT_HOME%bin; 三、测试是否安装成功 在cmd命令方式下输入:ant -version

    Apache Ant学习:介绍及安装

    Apache Ant用来构建和编译项目。 Apache Ant是Java语言编写的,可以跨平台使用。配置文件是基于XML语言。 获得并运行Ant:下载链接 1、确保计算机安装了Java环境; 2、下载Ant; 3、解压到本地文件夹; 4、设置环境...

    apache-ant-1.10.3

    Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。 简介 用户群:大多数的Java设计都被用于管理大量信息流,例如纽约州就...

    apache-ant-1.10.5-bin

    Ant下载完后解压,放一个合适的路径(如“D:\Java”),最好不要带中文...然后配置环境变量!... ANT_HOME:D:\Java\apache-ant-1.9.6 Path加入:%ANT_HOME%\bin; CLASSPATH加入:%ANT_HOME%\lib;

    apache-ant-1.10.13-bin

    Apache Ant是一个由Apache软件基金会提供的Java库与命令行工具,主要用于自动化软件编译、测试、部署等步骤,尤其在Java环境中的软件开发中广泛应用。其配置文件以XML格式编写,易于维护和书写,结构清晰。 Apache ...

    JAVA_Ant详细介绍与应用

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。 一.安装与配置 二.Ant的关键元素 三.Ant的...

    apache-ant-1.10.5-bin.zip

    Ant下载完后解压,放一个合适的路径(如“D:\Java”),最好不要带中文...然后配置环境变量! ANT_HOME:D:\Java\apache-ant-1.9.6 Path加入:%ANT_HOME%\bin; CLASSPATH加入:%ANT_HOME%\lib;

Global site tag (gtag.js) - Google Analytics