ANT学习笔记

ANT学习笔记


      Ant是Apache项目组的一个子项目,是一个基于JAVA的自动化脚本引擎,脚本格式为XML。除了做JAVA编译相关任务外,ANT还可以通过插件实现很多应用的调用。

大体的学习思路:
  1. ANT的一些基本知识和概念
  2. ANT的安装,解包,设置和使用
  3. ANT的简单的应用和操作
下面逐一讲解。

ANT的一些基本知识和概念

      当项目开发的规模越来越大,越来越繁重时,每次都重新编译,打包,测试,部署等一些操作都变得非常复杂而重复。在Java中的应用是于平台无关的,若用集成得IDE编程开发工具来实现这些操作,虽说容易而省事,但实际上应用时,还是需要像ANT这样的工具来处理这些复杂而重复的工作。ANT本身就是这样的一个流程教本引擎,用于自动化调用程序完成项目的编译,打包,测试,部署等操作。除了基于Java是平台无关外,脚本的格式是基于XML的,易于编写和修改,也是与平台无关的。
      每一个ANT脚本(一般都是build.xml文件)中设置了一些任务。这些任务不是散乱无序的,它们之间有一定的依赖关系,并且都是有先后执行的顺序的。比如,在Java的教本中,一般都有这些的任务:init,compile,javadoc,jar,deploy,clean等任务(当然这里的任务的名字,你可以随意而定,只要你能够知道它要执行什么操作和它们的依赖关系),这些任务顾名思义,看到它们的名字也就知道它大概要做什么了。

  • init是要执行初始化操作的,也就是说在执行编译,打包等操作之前要对这个环境和所需要的资源进行初始操作。
  • compile是用来编译java类的,生成.class文件
  • javadoc是用来生成API文档用的
  • jar是用来将所写的class文件打包生成.jar文件
  • deploy是用来执行部署操作的
  • clean是执行一些清除操作的。可有可无

      从这里就可以看出,它们之间是有一定的依赖关系的,这里的compile,javadoc,jar都要依赖于初始化的操作的完成,deploy要依赖于compile,jar等操作的完成。这样就可以看出它们之间是有一定关系的。ANT就是根据这些任务之间的相互关联来组织和执行一项又一项的操作。 在ANT中的脚本一般都是用XML文件来完成的(一般都是build.xml),用XML文件层次分明,任务和任务之间的关系也就一目了然了,便于改写操作。一般要用到的元素是project,target这两个(这也是最起码的要求,否则那还叫ant脚本嘛! ),project是作为根元素的,这里的它一般定义于要执行操作的项目名字和目录等属性。target那就是一项又一项的任务了,你可以定义多个。下面会用实例来讲述ANT脚本的编写规则。

ANT的安装,解包,设置和使用

  1. ANT的安装可以从Apache的网站下载:http://ant.apache.org,目前最新的版本是ANT1.6.2。它一般都是以压缩格式的文件
  2. ANT的解包,一般你可以将它单独解压到一个ant_home的目录下。用Winrar或Winzip工具来解压
  3. ANT的设置,(默认你的机子已经安装上了JDK,并且设置了JAVA_HOME等这些纯Java的设置了)这需要根据不同的操作系统来决定你该如何配置,我这里只介绍用Windows系统来设置,其它系统的设置可到Apache Ant的官方网站来查询。一般解压后就要在windows的环境变量中进行设置。这需要在path中设置ant_home,classpath 中设置它的ant.jar包路径,还需要设置一个ANT_HOME的环境变量。我以Windows 2000来举例说明。我将下载后的ant_1.6.2.zip在D:/盘根目录下解压后得到ant_home,也就是D:/ant_1.6.2;在Windows 2000里的"我的电脑"里点击右键,取它的环境变量,来进行设置,你要在它的环境变量里找到Path这一项,添加D:/ant_1.6.2/bin目录,在classpath的这项里,添加D:/ant1.6.2/lib目录,还要新建一个ANT_HOME环境变量,设置它的值为D:/ant_1.6.2。这样就可以打开dos工具,你来ant一下吧,呵呵!
  4. ANT的使用,这一般需要在你的工程的根目录下写一个build.xml文件,作为ANT执行的脚本,这样整个工程就可以根据你的这个脚本来执行编译,打包,测试,部署等这些烦杂而重复的工作了。

ANT的简单的应用和操作

      我在这里举一个实例来简单的介绍一下ANT的使用和脚本的编写,希望对大家有所启迪。

      一般用ant来操作,实际上就是写一个ANT脚本,然后用ant命令来执行这个脚本,这样所有在脚本中定义的任务就全部执行了。一般build.xml要放到工程的根目录下,这样就可以从这里来对整个工程来执行全面的操作。我这里的所举的工程目录结构是这样的:源程序(纯java文件)放在src目录下,工程所需的jar包放到lib目录下,build.xml也就是要编写的文件放到工程的根目录下。然后我们来编写一个build.xml文件,为ant执行创造一个脚本吧。
build.xml

<?xml version="1.0" encoding="GB2312"?>

<!-- 一个项目,可包含很多任务组(target) -->
<project default="usage" basedir=".">
 <property name="work.location" location="."/>
 <property name="work.jar.name" value="jcrontab.jar"/>
 <property name="work.src" value="${work.location}"/>

 <property name="Project Name" value="Work Project"/>
 <property name="docname" value="Document Name"/>
 <property name="vesion" value="1.0"/>
 <property name="date" value="2004-10-14"/>

 <!--初始化操作-->
 <target name="init">
  <tstamp/>
  <mkdir dir="${work.location}/classes"></mkdir>
  <mkdir dir="${work.location}/doc"></mkdir>
 </target>
 
 <!--指定在任务中需要使用的路径-->
 <path id="work.class.path">
  <fileset dir="${work.location}/lib">
   <include name="**/*.jar" />
  </fileset>
 </path>

 <!--编译,生成的类保存在work.location下-->
 <target name="compile" depends="init">
  <javac srcdir="${work.location}" destdir="${work.location}/classes" debug="true">
   <classpath refid="work.class.path"/>
  </javac>
 </target>
 
 <!--打包,生成的jar包保存在work.location下-->
 <target name="jar" depends="compile">
  <jar basedir="${work.location}/classes" destfile="${work.location}/${work.jar.name}"/>
 </target>

 <!--指定缺省任务-->
 <target name="dist" depends="jar">
  <copy todir="${work.location}/project/src">
   <fileset dir="${work.location}">
    <include name="**/${work.jar.name}"/>
   </fileset>
  </copy>
 </target>

 <!--生成JavaDoc文档-->
 <target name="javadoc" depends="compile">
  <javadoc destdir="${work.location}/doc" author="true" public="true" charset="GB2312" source="1.4" use="true" windowtitle="${Project Name}API" doctitle="${docname}">
   <classpath refid="work.class.path"></classpath>
   <fileset dir="${work.src}" defaultexcludes="yes">
    <include name="**/*.java" />
   </fileset>
  </javadoc>
 </target>

 <!--清除任务-->
 <target name="clean">
  <delete dir="${work.location}/classes"/>
  <delete dir="${work.location}/doc"/>
  <delete dir="${work.location}/project"/>
  <delete file="${work.location}/${work.jar.name}"/>
 </target>

 <!--使用说明-->
 <target name="usage">
  <echo message="${Name}Build file"/>
  <echo message="************************************"/>
  <echo message="available targets are:"/>
  <echo message="-jar --->generates the ${name}.jar file"/>
  <echo message="-compile --->compiles the source code"/>
  <echo message="-javadoc --->generates the API documentation"/>
  <echo message="-clean --->cleans up the directory and ${name}.jar file"/>
  <echo message="-dist --->copy jcrontab.jar to new build dirtectory"/>
  <echo message="*************************************"/>
  <echo message="use JDK1.4 or later to build ant "/>
  <echo message="See the comments inside the build.xml file for more details"/>
  <echo message="*************************************"/>
  <echo message=""/>
 </target>
</project>


      上面的脚本非常简单,而且实用。这里我定义了几个任务,也就是我刚才说过的那几个:init,compile,javadoc,jar等这些任务。usage是用来显示你编写的任务说明和任务列表,dist就是deploy,这里只是名字不同了。这里不在赘述了,大体上和上面讲的一样。

      在工程的定义里(元素project)有一个default属性,它是用来作为这个工程缺省的任务的,也就是,你需要指定一个缺省的任务来执行,这样ANT才能最起码执行一个任务。这也是在ANT中规定好了的。这个缺省的任务,你可以随意指定一个,但要根据你的工程的需要来设置,这样每次ant时,就直接就可以生成你想要的东西了。

      它们的依赖关系,我们可以通过每个任务中的属性标识depends来看到,比如:compile要依赖于init,那么你就需要在compile的任务属性定义中添加上depends这个属性,并且指定它依赖于init,其它任务的依赖关系与此类似,不在赘述。其它的一些属性,都可以从ANT的指南中得到,这里就不在讲述。

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值