`
abeetle
  • 浏览: 99085 次
  • 来自: ...
社区版块
存档分类
最新评论

ANT介绍及使用教程

阅读更多

 Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。

Ant 开发

Ant的构建文件
当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发

中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候

把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中

,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布以后的代码。
Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定

义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所

依赖的目标。
每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调

用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。
(1) 核心任务。核心任务是Ant自带的任务。
(2) 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。
(3) 用户自定义的任务。用户自定义的任务实用户自己开发的任务。
1.<project>标签
  每个构建文件对应一个项目。<project>标签时构建文件的根标签。它可以有多个内在属性,

就如代码中所示,其各个属性的含义分别如下。
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有

自己的构建文件。

2.<target>标签
一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例

如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必

须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
(1).name表示标明,这个属性是必须的。
(2).depends表示依赖的目标。
(3)if表示仅当属性设置时才执行。
(4)unless表示当属性没有设置时才执行。
(5)description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行

每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的

depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执

行的顺序是prepare->compile->run。
一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总

会被执行。

3.<mkdir>标签
该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:
<mkdir dir=”${class.root}”/>
通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。

4<jar>标签
该标签用来生成一个JAR文件,其属性如下。
(1) destfile表示JAR文件名。
(2) basedir表示被归档的文件名。
(3) includes表示别归档的文件模式。
(4) exchudes表示被排除的文件模式。

5.<javac标签>
该标签用于编译一个或一组java文件,其属性如下。
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动停止。

6.<java>标签
该标签用来执行编译生成的.class文件,其属性如下。
(1).classname 表示将执行的类名。
(2).jar表示包含该类的JAR文件名。
(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中运行该类。
(5).failonerror表示当出现错误时自动停止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。

7.<delete>标签
该标签用于删除一个文件或一组文件,去属性如下。
(1)/file表示要删除的文件。
(2).dir表示要删除的目录。
(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
(4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。

8.<copy>标签
该标签用于文件或文件集的拷贝,其属性如下。
(1).file 表示源文件。
(2).tofile 表示目标文件。
(3).todir 表示目标目录。
(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。
(5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。
(6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。
(7).verbose 表示制定是否显示详细信息,默认值不显示。

例子:

<?xml version="1.0" encoding="UTF-8"?>

<o:p> </o:p>

<project default="all" name="pluto-project" basedir=".">

<o:p> </o:p>

<o:p> </o:p>

<o:p> </o:p>

       <target name="all" depends="api, container, portal">

       </target>

<o:p> </o:p>

       <target name="clean" depends="api-clean, container-clean, portal-clean">

       </target>

<o:p> </o:p>

       <target name="api">

              <property name="final.name" value="portlet-api-@@DATE@@"/>

              <ant antfile="build.xml" dir="api" target="jar" inheritAll="false" />

       </target>

       <target name="api-clean">

              <ant antfile="build.xml" dir="api" target="clean" inheritAll="false" />

       </target>

<o:p> </o:p>

       <target name="container" depends="api">

              <ant antfile="build.xml" dir="container" target="jar" inheritAll="false" />

       </target>

<o:p> </o:p>

       <target name="container-clean">

              <ant antfile="build.xml" dir="container" target="clean" inheritAll="false" />

       </target>

<o:p> </o:p>

       <target name="portal" depends="container">

              <ant antfile="build.xml" dir="portal" target="jar" inheritAll="false" />

       </target>

       <target name="portal-clean">

              <ant antfile="build.xml" dir="portal" target="clean" inheritAll="false" />

       </target>

<o:p> </o:p>

</project>

<o:p> </o:p>

<o:p> </o:p>

这个build.xml 文件引自apache的一个项目。里面可以看到有 project 以及target 标签。有些项目的build.xml可能不是以<?xml version="1.0" encoding="UTF-8"?>开头的,不过没关系,以后再说明。每一个build.xml 只能有一个project 标签, 每个project 标签里面包含了几个tartget标签。每一个target可以独立执行或者依赖于其他target执行完毕才能执行。

定义变量<o:p></o:p>

<o:p> </o:p>

在这个文件中没有看到属性定义,其实如果你想使用定义变量的话,可以在project 标签下 定义如这样的标签

<project ……>

<property name="src" location="src"/>

  <property name="build" location="build"/>

<target ……>

这样你在引用的时候就可以使用形如${build}

<target name="init">

……

<mkdir dir="${build}"/>

……

  </target>

这样的变量了,省得自己去修改每一处需要用到变量的地方

<o:p> </o:p>

<o:p> </o:p>

添加目录操作<o:p></o:p>

<o:p> </o:p>

<target name="init">

              <mkdir dir="${dist.dir}" />

              <mkdir dir="${dist.classes.dir}" />

              <mkdir dir="${dist.webapps.dir}" />

       </target>

<o:p> </o:p>

这里的dist.dir 等用${}括起来的,是我们定义的变量。

<o:p> </o:p>

编译java文件的操作<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

<target name="compile">

              <javac srcdir="${src.dir}" destdir="${dist.classes.dir}" debug="true" encoding="GBK">

                     <classpath refid="classpath" />

              </javac>

             

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

       </target>

<o:p> </o:p>

这里说一下 javac 这个任务标签

<o:p> </o:p>

其中看到 srcdir destdirdebug encoding 等属性,还有一个 classpath 的子标签。Srcdir就是目标source,需要编译的源文件,destdir就是目的地,编译出来的class的存放地。Debug参数是指明source是不是需要把debug信息编译进去,如果不加这个参数等于在命令行后面加上 -g:none 这个参数。Encoding 这个参数指明以何种编码方式编码你的source文件,对于有中文文字的代码来说这项比较重要。

<o:p> </o:p>

Classpath 指明了你需要应用的jar包,或者其它class文件的所在地,这也是非常重要的一项选项。使用方式有以下几种。

<o:p> </o:p>

<property name="lib.dir" value="${basedir}/lib" />

…….

<path id="classpath">

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

                  <include name="*.jar"/>

            </fileset>

        </path>

……

<o:p> </o:p>

<classpath refid="classpath" />

<o:p> </o:p>

作为classpath 引用预先定义的jar包位置,refid 指明了一个引用变量。一般在real-world情况下会这样使用。简单的使用是这样的:

<javac srcdir="${src}"

         destdir="${build}"

         classpath="xyz.jar"

         debug="on"

  />

<o:p> </o:p>

这就简单了点。

<o:p> </o:p>

jar包操作<o:p></o:p>

<o:p> </o:p>

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

<o:p> </o:p>

这个就是把编译好的文件打成jar包的ant 脚本,和上面javac一样,可以放在任意位置。很明显destfile 就是 你想要打成的包,basedir就是你的目标class文件,其它的复杂参数手册上都有,可以对照参考。

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

    <fileset dir="${build}/classes"

             excludes="**/Test.class"

    />

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

  </jar>

<o:p> </o:p>

上面这段脚本也很容易理解,就是除了Test.class文件以外,把一个sourceresource目录,连同编译后的class脚本一起打进app.jar包内。

<o:p> </o:p>

复制文件操作<o:p></o:p>

<o:p> </o:p>

<copy todir="${dist.webapps.dir}/WEB-INF/lib" overwrite="true" flatten="true">

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

                            <include name="*.jar" />

                            <exclude name="j2ee.jar" />

                     </fileset>

              </copy>

<o:p> </o:p>

上面脚本很容易理解。 Todir 指定了需要拷贝的地点,overwrite 是否需要覆盖,flatten是否忽略目的目录结构,只得是不管什么目录,直接拷贝文件到目的地,丢弃其所在结构。

<o:p> </o:p>

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

                            <include name="*.jar" />

                            <exclude name="j2ee.jar" />

                     </fileset>

选定除了j2ee.jar包以外的所有在lib.dir变量所定义的包下面的jar

<o:p> </o:p>

<o:p> </o:p>

其它拷贝样式

<o:p> </o:p>

<copy file="myfile.txt" todir="../some/other/dir"/>

单文件拷贝

<copy file="myfile.txt" todir="../some/other/dir"/>

文件到目录拷贝

<copy todir="../new/dir">

    <fileset dir="src_dir"/>

  </copy>

目录对拷贝

<o:p> </o:p>

比较有用的命令

<o:p> </o:p>

<copy todir="../backup/dir">

    <fileset dir="src_dir"/>

    <filterset>

      <filter token="TITLE" value="Foo Bar"/>

    </filterset>

  </copy>

拷贝 sr_dir 目录到 backup/dir目录,并且把所有文件中的 @TITLE@ 替换成 Foo Bar 。还有很多用法,等到要使用的时候可以去查手册。<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

删除操作<o:p></o:p>

<o:p> </o:p>

<target name="clean"><o:p></o:p>

              <delete dir="${dest.dir}"/><o:p></o:p>

              <delete file="${dest2.dir}"/><o:p></o:p>

       </target> <o:p></o:p>

<o:p> </o:p>

<o:p></o:p>

<o:p></o:p>

<o:p>部分内容参考:Spike Spiegel</o:p>

<o:p></o:p>

<o:p>详细参考:http://ant.apache.org/manual</o:p>

分享到:
评论

相关推荐

    Ant工具使用(教程)

    Ant工具使用(介绍、如何安装、如何写ant脚本、如何整合ant、ant进阶等等)

    ANT教程的介绍

    ANT的详细介绍,里面包括了什么是ant,什么是构建,ant的好处等其它例子。

    ant入门教程及实例

    本内容包含了Ant的历史简要介绍,Ant的功能以及Ant框架的介绍,并对下载安装使用Ant 进行了示例介绍,同时通过一个Java程序讲解了Ant的基本使用方法。

    Ant入门学习手册(java ant教程)

    ant的工具的详细介绍,教您使用ant工具

    ant入门教程-通俗易懂

    ant的简单入门教程 1、ant介绍;2、ant安装;3、第一个ant脚本;4、整合ant;5、ant进阶;6、常用task;7、控制流程;8、实例分析;9、如何继续学习;10、ant使用cvs实例;11、Q&A

    ant入门教程

    Apache Ant是一个基于Java的构建工具,它可以用于构建多种项目,但是...在本课程的内容中,将介绍Ant构建项目的基本用法,利用这里基本的知识,我们可以尝试使用Ant来构建自己的项目,体验Ant给我们带来的方便和高效。

    ant1.7使用手册指南

    ant的一些使用手册 包括ant1.7基本介绍及ant1.7的API文档

    Apache Ant入门教程

    Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James Duncan Davidson 介绍,这个工具的名称是 another neat tool(另一个整洁的工具) 的...但愿您在完成本教程其余内容的学习之后,会欣赏 Ant 的这些优势。

    ant工具的基本使用

    本文介绍了Java开源界一个著名的打包工具Ant的使用

    Ant使用教程

    比较全面的讲述了Ant的使用和一些功能的介绍,也有提及Ant8的ssexec和scp,以及比较常用的task。通读该文档便可以轻易的使用Ant,当然,多看其他开源框架的Ant也有助于读者的Ant使用。

    java Ant入门教程

    Ant入门教程 本内容包含了Ant的历史简要介绍,Ant的功能以及Ant框架的介绍,并对下载安装使用Ant进行了示例介绍,同时通过一个Java程序讲解了Ant的基本使用方法。

    Ant教程-详细使用方法

    本内容包含了Ant的历史简要介绍,Ant的功能以及Ant框架的介绍,并对下载安装使用Ant进行了示例介绍,同时通过一个Java程序讲解了Ant的基本使用方法。

    ant说细中文教程

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装、验证安装、使用方法、使用实例、ant命令等内容,需要的朋友可以参考下 一、概述 ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化...

    Ant介绍以及基本使用指南

    Ant是什么?N年前的某个没落软件?错,Ant是辅助开发工具!不多说了,这是个很简短的教程,个人认为挺实用。用得着就下,用不着别下,就这么简单。

    Ant使用指南_发布工程师必备

    如果您正在编写 Java 代码却还没有使用 Ant,那么本教程就是为您准备的。不管您当前是否在使用某种不同的生成工具,或者根本就没有使用生成工具,了解关于Ant 的更多知识或许会促使您转而使用它。 如果已经在使用 ...

    Ant使用指南

    如果您正在编写 Java 代码却还没有使用 Ant,那么本教程就是为您准备的。不管您当前是否在使 用某种不同的生成工具,或者根本就没有使用生成工具,了解关于 Ant 的更多知识或许会促使您转而使用它。 ...

    ant教程1

    ant教程 介绍ant的基本使用方法,第一部分

    Java自动化工具Ant的基础使用教程

    主要介绍了Java自动化工具Ant的基础使用教程,例子在Windows系统下操作演示,讲解了Ant基本的文件操作和属性,需要的朋友可以参考下

    ant初学者入门级教程

    一个介绍ant如何使用的文档,很详细,适合初学者入门使用。

    ANT的详细介绍

    ANT的详细介绍,里面包括了什么是ant,什么是构建,ant的好处等其它例子。

Global site tag (gtag.js) - Google Analytics