Ant 学习笔记

一、Ant安装和配置

  • 下载ant发布包
  • 解压缩到一个目录即可
  • 将该目录下的子目录bin添加到PATH环境变量中

二、Ant入门

ant的使用非常简单,安装好ant后,在构建文件中(默认名字为build.xml)配置好构建任务,然后调用ant命令,配置的任务就开始执行了。

1. 编写构建文件

创建一个用于编译和打包Java项目的配置文件build.xml,默认为build.xml,也可以自己随便起,执行的时候使用-f 选项指定这个文件即可:

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

<project name="AntDemo" default="compile" basedir=".">

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

  <property name="build.dir" value="build"/>

  <property name="build.classes" value="${build.dir}/classes"/>

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

 

  <target name="prepare" description="xxxxxxx">

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

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

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

  </target>

  

  <target name="clean" description="xxxxx">

    <delete dir="${build.fir}"/>

  </target>

 

  <target name="compile" depends="prepare" descriptoin="xxxxxxxxx">

    <javac srcdir="${src.dir}" destdir="${build.classes}"/>

  </target>

 

  <target name="jar" depends="compile" descriptoin="xxxxxxxxx">

    <jar jarfile="${build.lib/antDemo.jar}" basedir="${build.classes}" excludes="**/*Test.class"/>

  </target>

 

  <target name="all" depends="clean, jar"/>

</project>

配置文件,保证是一个合法的XML文件并且使用了正确的标签和属性,就可以使用Ant运行。

根据这个配置文件可以看出,Ant把任何任务分成3层(工程-目标-任务)

  • 最基层的 Project
  • 目标 Target:可以在ant命令中调用的基本单位,如clean, compile, jar等。在命令行可以这样调用 ant clean 或 ant clean jar。Target之间可以存在依赖关系,一个Target执行前会先执行它依赖的那些Target。Project可以设置默认的Target,ant命令中不指定任何Target时就调用这个默认的。
  • 任务Task:各种Task可以执行各种不同的具体任务,如mkdir,delete,javac,jar等。

Task详细说明可以查看官方文档: http://ant.apache.org/manual/tasklist.html

 

Ant文件中用Property标签配置属性值,在定义之后的其他地方就可以引用,避免硬编码。

所有的构建文件有且仅有一个<project>元素,其中至少要有一个<target>元素。

2. 运行Ant

ant命令语法格式如下:

ant [option] [target]

调用ant时默认全在当前目录中查找默认的构建文件名:build.xml

也可以用ant -f mybuild.xml的方式手动指定构建文件

以上面的构建配置文件为例,下面的几种调用都可以: 

ant                              调用默认构建文件(build.xml)中的默认目标(compile)

ant -f mybuild.xml  jar          调用构建文件mybuild.xml中的jar目标

ant clean jar                    调用默认构建文件(build.xml)中的clean和jar目标。需要注意多个目标会按调用先后顺序执行。如果调用ant jar clean就是先编译打包(jar),然后全清理掉(clean),就白干了。

 Ant执行时会按执行顺序显示每个Target的名字,也会显示每个任务的名字([任务名])和任务中输出的信息。

 3. 查看构建文件所有目标

ant [-f BUILDFILE] -projecthelp

使用这个命令可以列出构建文件中的所有目标和description信息。

4. Ant命令选项

  • -h,  -help   查看帮助信息
  • -p,  -projecthelp  查看构建文件中的所有目标信息
  • -version  显示Ant版本
  • -q,  -quiet   抑制并非由构建文件中echo任务所产生的大多数输出消息
  • -S,  -silent   只显示Task输出和构建失败信息
  • -v,  -verbose   显示构建过程中每个操作的详细消息, 不能和-debug同时使用
  • -d,  -debug     显示Ant和任务开发人员已经标志位调试信息的消息。不能与-verbose同时使用
  • -e,  -emacs     对日志消息进行格式化,使其能够Emacs的shell模式解析。具体就是打印任务消息时不缩排也不输出前面的 [任务名]
  • -diagnostics    显示对调试有用的信息
  • -f <file>,  -buildfile <file>, -file <file>   指定一个构建文件,而不是使用默认的build.xml
  • -D<property>=<value>    通过命令行向构建过程中传递属性值
  • -propertyfile <propertyfile>   从property文件中加载属性值并传递到构建过程
  • -s <file>,  -find <file>     指定Ant应当使用的构建文件,如果指定的filename文件在当前目录中没找到,就到父目录中进行搜索,直到到达文件系统的根,还找不到则构建失败。
  • -k,  -keep-going    执行不依赖失败目标的所有目标。
  • -lib <path>    指定查找jars和classes的目录
  • -l  <file>, -logfile <file>   将日志重定向到指定文件
  • -logger <class>   指定一个类来处理Ant的日志记录。该类必须实现了org.apache.tools.ant.BuildLogger接口
  • -listener <class>   为Ant设置一个监听类,将其增加到Ant的监听器列表中。Ant与IDE或其他程序集成时非常有用,后面会专门写这个。
  • -inputhandler <class>  指定用于处理输入请求的类
  • -main <class>   覆盖Ant正常的入口点
  • -noinput    不允许交互式输入
  • -autoproxy   Java1.5+,使用OS的代理设置
  • -nice number
  • -nouserlib
  • -noclasspath

 三、构建文件

1.Ant的构建块

Project(工程)    任何构建文件的第一个元素必须是<project>标签,而且只能有一个。

  • name属性     工程的名字,也是构建文件的标识符。
  • default属性    运行Ant不指定Target时,默认执行的Target。可以设置成一个构建文件中定义的Target名字。推荐默认Target显示构建文件的帮助信息或者执行完成的构建。
  • basedir属性   定义工程的根目录,一般情况下都是" . ",也就是构建文件所在的目录(不是运行Ant命令是的目录)。在一个多层次的项目中,basedir还可以定义不同的参考点。

Target(目标)  一个Project可以包含多个Target,一个总的任务过程可以拆分成几个target,每个Target可以单独调用。可以把target理解成能够单独执行的一个个步骤(阶段)。具体怎么拆分这个总任务,拆分粒度是粗还是细,把哪些Task放在哪几个Target中,都是编写构建文件要考虑的问题。一般来说,粒度更小可以更灵活的组合,有些target失败也不会影响另一些的执行。但是粒度也不能太小,太小了会很琐碎不好维护。

  • name属性
  • depends属性
  • description属性

Task(任务)  任务是构建文件中的最小构建单位。通过Target把一个总过程组织成了几个大的Target目标(步骤),但是Target并不做任何具体的工作,Target下面有包含一些Task,所有的具体工作都是靠这些task来完成。Ant提供非常多的Task,如编译,大包,文件系统操作等等。Ant中每个任务对应于Ant对象模型中的一个Java对象,要自定义新的任务就是要编写执行该任务类然后提供给Ant调用。很多系统命令也都是用Task包装,而不是直接调用shell命令,在不同的操作系统上Task的使用方式是完全一致的。

构建文件中任务标签内部也可以有很多层次。但是Task内部的这些层次结构和Java类的层次结构没有任何关系了。

Task标签不再有统一的属性和子元素,内部层次完全取决于具体的任务。

2. 数据元素

保存数据的变量和抽象数据类型。数据元素有两类:Property和DateType

Property:

表示字符串的“键-值”对;使用${propName}的形式引用Property数据。

posted @ 2020-03-03 10:24  xueer1234  阅读(180)  评论(0编辑  收藏  举报