Apache Ant 快速参考手册

来源:互联网 发布:淘宝小号如何实名认证 编辑:程序博客网 时间:2024/04/29 07:39

    本文将对Apache Ant中常用的标签(任务),参数配置进行介绍,以供快速参考使用。

 

    Apache Ant的主页在这里:http://ant.apache.org/

 

一、Ant简介

    Ant是一种基于Java的build工具,旨在改进make工具的缺点和局限性。一般来说,基于shell的makefile在使用中或许会带来一些问题,比如使用了特定平台的命令造成移植问题以及文本tab问题等。而且在用于编译Java代码时也相对比较繁琐(classpath配置等)。

    与基于shell命令的扩展模式不同,Ant用Java的类来扩展。(用户)不必编写shell命令,配置文件是基于XML的,通过调用target树,就可执行各种task。每个task由实现了一个实现了特定Task接口的对象来运行。

    ant默认加载的配置文件名为 build.xml,如果需要指定其他文件可以通过 -buildfile或-file和-f参数指定(ant -buildfile mybuild.xml)。后面可以再加上构建目标的名字(类似于make的用法)。

 

二、一个简单的build.xml

    在下面的例子中,使用了javac(编译)和java(运行)task

 

    project标签指定了项目的名称,基本路径以及默认的build目标(default)。

    最后,在与该xml相同的目录下使用ant命令,即可完成Java代码的编译和执行

 

三、Ant常用任务(task)

    本节将对Ant常用task标签进行介绍。

 

1. 定义变量

    对于在配置文件中需要多次使用的基本路径,可以在project下面定义一个property标签,它的使用方法就像使用变量一样。例如:

<property name=”webapps” location=”webapps” />

说明:name表示变量的名称,location表示变量的值。

 

使用该变量的方法如下:

<mkdir dir=”${webapps}” />

 

2. 创建目录和删除目录

    使用ant可以很方便的建立和删除目录,并可以一次建立和删除多级目录。如下面所示:

 

<mkdir dir=”${webapps}” />

<delete dir=”${webapps}” />

 

说明:dir表示要建立或者删除的目录名。也可以一次定义多级目录。例如:${webapps}/WEB-INF/classes

注意:删除目录的时候,其子目录和目录内的文件都将一并被删除。

 

 

3. 编译文件

    使用javac标签可以进行java程序的编译工作。其基本例子如下:

 

<javac srcdir=”${srcdir}” destdir=”${destdir}” >

</javac>

 

 

说明:srcdir就是Source directory,也就是要编译的源文件的目录。Descdir就是编译好的文件的目标路径。除了这两个最基本的属性外还有debug,encoding等属性。

其中debug表明编译的时候是否需要把debug信息编译到class文件中(debug=true),如果不加这个参数,就相当于编译的命令行后面增加了-g:none参数。

Encoding表明以何种编码方式来编译你的源文件(encoding="utf-8"),和命令行的-encoding参数一样。

此外还有source和target属性,source用于指定解析代码时JDK的版本(默认为1.3,指定1.4+会激活断言);target用于指定生成的目标代码执行环境(target="1.5"为JDK1.5+环境)。

 

另外,javac标签还可以包含classpath子标签,表明你在编译的时候需要使用到的jar包或者其他class文件所在的路径。其使用方法如下:

 

在javac标签中直接使用classpath:

 

<javac srcdir=”${srcdir}” destdir=”${destdir}” classpath=”${lib}/aaa.jar”>

</javac>

 

也可以事先单独定义,然后再使用:

 

<path id=”classpath”>

  <fileset dir=”${lib.dir}”>

     <include name=”**/*.jar”/>

  </fileset>

</path>

 

 

<javac destdir="${dist.classes}" deprecation="on">

  <src path="${src.code}"/>

  <classpath refid="classpath"/>

</javac>

 

<classpath refid>标签也可以写作javac标签的属性:classpathref="classpath"

 

 

4. 打包操作

    打包操作就是将编译好的class文件打包成一个jar文件。其基本用法如下:

<jar destfile="${dist}/app.jar" basedir="${dist.dir}"/>

 

说明:destfile属性表示打包后生成的目标文件的名称。basedir表示class文件所在的路径,该目录下的所有文件都将被打包到jar文件中。

 

对于复杂的情况可以采用以下的方法来解决:

 

<jar destfile="${dist}/test.jar">

  <fileset dir="${build}/classes" excludes="**/Test.class" />

  <fileset dir="${src}/resources"/>

</jar>

其中,excludes属性用于指定要排除的文件

 

5. 复制文件操作

复制文件操作就是将一系列的文件从一个目录下拷贝到另一个目录下。其基本的用法如下:

 

<copy todir="${dist.dir}" overwrite="true" flatten="true">

    <fileset dir="${lib.dir}">

        <include name="*.jar" />

        <exclude name="j2ee.jar" />

    </fileset>

</copy>

 

说明:todir表示目标目录。overwrite表示是否覆盖。flattern表示是否丢弃源文件的目录结构(如果源文件夹中包含多级目录,这些目录也会被建立在目标文件夹中)。

 

提示:如果不包括include和exclude属性,那么会将源目录下的所有文件和文件夹拷贝到目标目录中。

 

 

     以上是ant的基本用法,更多的task标签及属性说明,可以参见Ant的在线手册:http://ant.apache.org/manual/index.html