Ant的使用简介

Posted 穆瑾轩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ant的使用简介相关的知识,希望对你有一定的参考价值。

Ant的使用简介

1、Ant简介

    ApacheAnt是一个基于Java的构建工具。是一个将软件编译、测试、部署等步骤想结合并加以自动化的一个工具,大多用于Java环境中的软件开发。目前主要的Java ide都带有Ant,产品如Eclipse、NetBeans和IntelliJ IDEA。

    理论上,它有点像make,既然已经有make、gnumake、nmake、jam和其他工具,为什么还要使用另一个构建工具呢?因为所有这些工具都有一些限制(平台局限性),Ant的原始作者在跨多个平台开发软件时无法忍受这些限制,Ant不是使用基于shell的命令进行扩展的模型,而是使用Java类进行扩展。配置文件不是编写shell命令,而是基于XML的,调用一个目标树,在其中执行各种任务。每个任务都由实现特定任务接口的对象运行。

2、Ant的环境搭建

2.1 配置环境变量

    前提条件:ANT的环境依赖于JDK。

    (Java版本越最新,Ant任务就越多。如果没有JDK,只有运行时(JRE),那么许多任务将无法工作。如果在windows下运行,bat脚本使用了三个环境变量:ANT_HOME、CLASSPATH和JAVA_HOME。)

    ANT_HOME到您解压Ant到的目录,并将${ANT_HOME}/bin (Unix)或%ANT_HOME%\\bin (Windows)添加到您的PATH。 

    也可以运行:ant -diagnostics 命令检查是否安装好。

2.2、Ant和JDK的版本对应关系

    也可以运行:ant -diagnostics 命令检查是否安装好。

2.3、Ant的目录说明

解压后:

  • bin:包含启动器脚本

  • docs:Ant文档

  • etc:包含XSL,增强XML各种任务的输出创建,迁移并构建文件

  • lib:包含Ant jar和必要的依赖项

              -ant-junit.jar --> junit task-单元任务

              -ant-apache-bsf.jar-->script task-脚本任务

              -等等

  • README, LICENSE, fetch.xml,其他文本文件。

3、Ant的基本使用

    当我们运行ant时,发现如下提示:是因为您需要为项目编写构建文件。

    Ant的构建文件用XML编写,每个构建文件包含一个项目和至少一个(默认)目标。

3.1、Ant的构建标签简介

3.1.1、 Projects标签

    project标签是每个构建文件的根标签,该标签的语义是代表一个项目。

<!--project标签:一个项目,包含属性:
    1)name:项目的名称。
    2)default:没有提供目标时使用的默认目标。(default="help",这个目标将始终作为项目初始化的一部分执行。
    3)basedir:基准目录,如果没有使用,则将使用构建文件的父目录。
-->
<project name="sunline-its" default="help" basedir=".">
</project>

3.1.2、description标签

    项目描述信息。

<project name="sunline-its" default="help" basedir=".">
    <description>描述信息</description>
</project>

3.1.3、Targets标签

    target标签表示的是一个生成过程或是一个任务。一个项目标签下可以有一个或多个target标签。一个target可以依赖于其他target标签。

    例如,您可能有一个用于编译的目标,还有一个用于创建可分发对象的目标。只有在首先编译后才能构建可分发对象,因此分发目标依赖于编译目标。Ant解析这些依赖项。

    target简而言之,是一个容器,指令集合,一个事务。

<project name="MyProject" default="B" basedir=".">
   <!--
    target标签:目标,是一个容器,指令集合或一个事物。常用属性:
    1)name:任务名称(必须);
    2)depends:依赖项,执行该target之前需要先执行的target,非必须;
    3)description:提供描述信息,这些描述可由-projecthelp命令行选项输出,非必须;
    4)if:当属性被设置时才执行该target,非必须;
    5)unless:当属性没有设置时才执行该target,非必须。
   -->
   <target name="A" description="generate the distribution">...</target>
   <target name="B" depends="A">...</target>
   <!--a属性配置了则为真,此任务可以执行
       注:if只能指定一个属性,要多个属性可以使用depends
    -->
   <target name="C" depends="A" if="a">...</target>
</project>

3.1.4、property标签

    property标签用于定义一个类似于程序语言中的变量,但是定义之后不可修改。

<!--
    property标签常用属性如下:
    1)name表示属性名
    2)value表示属性的值
    3)内置的一些属性:
        ant.home:Ant的主目录
        ant.project.default-target:它包含当前正在执行的项目的默认目标的名称
        ant.project.invoked-targets:调用当前项目时的目标列表
   注:<property file="build.properties"/> 当然还可以直接使用属性文件去定义
-->
<project name="MyProject" default="" basedir=".">
    <property name="name" value="mjx"/>
    <property name="age" value="25"/>
    <echo message="name: ${name}, age: ${age}"/>
    <echo message="${ant.home}"/>
</project>

案例效果:

3.2、Ant的运行方式

    Ant有两种常用的运行方式:一是使用命令行运行,另一种是在支持Ant的集成开发环境(IDE)中运行。

3.2.1、命令行运行Ant

    使用命令行运行的常用命令选项:

<!--不加任何选项,使用当前目录中的build.xml文件运行Ant-->
ant 
<!--打印帮助信息,-h为简写-->
ant --help, -h  
<!--打印版本信息并退出-->
ant -version 

<!--显示当前build.xml的主要任务和描述信息-->
ant -projecthelp , -p 

<!--诊断或报告问题-->
ant -diagnostics

<!--指定搜索jar和类的路径-->
ant -lib <path> 

<!--调用执行相似build.xml的文件,- file,-f为简写-->
ant -buildfile, - file,-f 

<!-- 在默认目标上,使用当前目录中的test.xml文件运行Ant-->
ant -buildfile test.xml

<!-- 在名为dist的目标上,使用当前目录中的test.xml文件运行Ant-->
ant -buildfile test.xml dist

<!--用于设定一些变量,这些变量可以再target中直接引用,或覆盖已设定的属性值-->
ant -D<property>=<value>

3.2、Ant的Core Tasks(Standard Tasks或内置Tasks)

    Ant内置了很多的指令任务,当然也允许我们自定义任务。

    ant中的许多标准任务采用一个或多个文件集,这些文件集遵循这里给出的规则。 这个列表是这些列表的子集,它是标准ant任务的列表,可以充当隐式文件集。

    这些内置指令主要有:

​    1)文件操作

​    2)代码编译

​    3)打包部署

​    由于涉及到其他内容,这里先简单的介绍下文件指令任务。

3.2.1、mkdir标签

    mkdir用于创建目录。

<!--会创建build/classes目录-->
<mkdir dir="build/classes"/>  

3.2.2、copy标签

   copy标签用于复制文件/目录。

<project name="MyProject" default="" basedir=".">
<!--单个文件复制:将test.xml拷贝到dist目录-->
<copy file="test.xml" todir="dist"/>
<!--单个文件复制:将test.xml拷贝到dist目录,并另命名为testnew.xml -->
<copy file="test.xml" tofile="dist/testnew.xml"/>
<!--目录复制:将dist目录拷贝到dist_copy -->
<copy todir="dist_copy">
       <!--指定要复制的目录-->
       <fileset dir="dist"/>
</copy>
</project>

案例效果:

3.2.3、delete标签

    删除一个(组)文件或者目录。

<!--删除一个文件-->
<delete file="/dist/test.xml"/>
<!--删除文件夹:方式一-->
<delete dir="dist"></delete>
<!--方式二:删除指定目录及其子目录,包括他自己
    includeEmptyDirs:即使是空目录也删除,如果不是true则只删文件,不删目录
-->
<delete includeEmptyDirs="true">
    <!--fileset 指定删除的目录和文件-->
    <fileset dir="dist/lib"/>
</delete>

3.2.4 、move 标签

    移动或重命名一个(组)文件、目录。

<!--移动或重命名一个文件-->
<move file="file.orig" tofile="file.moved"/>
<!--将一个目录移到另外一个目录下-->
<move todir="new/dir/to/move/to">
    <fileset dir="src/dir"/>
</move>
<!--移动文件过程中增加bak后缀-->
<move todir="dist/lib/.bak">
	<fileset dir="dist/lib/">
		<!--include包含,exclude不包含,即除了*.bak结尾的文件-->
	    <exclude name="*.bak"/>
	</fileset>
	<!--给符合的文件:非*.bak结尾的加上后缀-->
	<mapper type="glob" from="*" to="*.bak"/>
</move>

案例效果:

3.3、Ant的类型集

    在上面的案例中,我们接触到,fileset、exclude、mapper,这类标签。这类标签是Apache Ant提供的一些的类型集,我们可以使用它们来处理数据、文件、路径等,也可以用作服务。类型都具有id和refid这两个属性,id作为这个类型的唯一标识,而refid用于指定要引用的类型,指定refid为要引用的类型的id。官方文档中提供的类型:

 

 常用的类型集:

类型描述
ClassFileSet用于创建具有所有必需类的Jar
Description描述类型
DirSet对目录进行分组
FileList文件列表
FileSet一组文件
File Mapper Type用于映射源文件和目标文件
FilterSet一组过滤器
PatternSet定义模式集合(由ids引用的一组模式)
SelectorsFileSet元素有助于选择元素
TarFileSettar格式的文件集,它是FileSet的一种特殊形式,ant1.7起
ZipFileSetzip格式的文件集,Since Ant 1.6,支持refid attribute

其它:

类型描述
Extension/ExtensionSet表示一组扩展的实用程序类型(设置扩展名)
Permissions表示授予或撤销在运行ApacheAnt的JVM中执行的特定部分代码的权限。

都具有的属性:

类型描述
id类型的唯一标识
refid成为对别处定义的引用。指定要引用的类型,指定refid为要引用的类型的id

3.3.1、ClassFileSet 类文件集

    ClassFileSet 是FileSet的一种特殊类型,它包括根类所依赖的所有类文件。通常用于为特定的应用程序创建一个包含所有必需类的jar。类文件集通常通过引用来使用。它们使用id值声明,然后在需要使用普通文件集的地方将其用作引用。

使用案例:

1)步骤一:新建一个HelloWorld.java

    在dist目录下新建com/cn/test目录,新建一个类。   

2)步骤二:配置classFileType.xml

<project name="MyProject" default="cft" basedir=".">
    <!--id="reqdClasses":为全局引用的id
	    dir="dist/class: 为com目录的所在目录-->
    <classfileset id="reqdClasses" dir="dist/class">
	    <!--com.cn.test.HelloWorld 类文件集,使用整个文件夹*结尾也行-->
        <root classname="com.cn.test.HelloWorld"/>
    </classfileset>
    <target name="cft" description="ClassFileSet Demo">
		<classfileset id="reqdClasses" dir="dist/class">
		  <!--includes:需要打包的class文件,打入HelloWorld*.class(HelloWorld.class或其内部类等等)-->
          <rootfileset dir="dist/class" includes="com/cn/test/HelloWorld*.class"/>
        </classfileset>
		<!--打包生成的jar包-->
		<jar destfile="helloworld.jar">
          <fileset refid="reqdClasses"/>
        </jar>
	</target>
</project>

 3)下载依赖包:

官网文档上提示:This type requires the BCEL library.下载链接

扩展,如果需要其他功能,可以下载:

ant开发所用包下载链接描述
bcel.jarhttps://commons.apache.org/bcel/注意版本:bcel-6.5.0需要jdk8,可以下载bcel-6.0
jython.jarhttps://www.jython.org/Python with script task
jakarta.mail.jarhttps://eclipse-ee4j.github.io/mail/
jruby.jarhttps://jruby.org/Ruby with script task

案例执行效果:          

3.3.2、Description 描述类型

    Description类型不包含任何参数,可在target内使用,也可以放在全局的构件文件中使用。

<description>
    This buildfile is used to build the Foo subproject within
the large, complex Bar project.
</description>

3.3.3、DirSet目录集

    目录集是一组目录。这些目录可以在从基本目录开始的目录树中找到,并通过从许多模式集和选择器中获取的模式进行匹配。

    模式集可以指定为嵌套的<patternset>元素。此外,DirSet持有隐式PatternSet,并直接支持<PatternSet>的嵌套<include>、<includefile>、<exclude>和<excludesfile>元素以及<PatternSet>的属性。

AttributeDescriptionRequired
dir拥有此DirSet的目录树的根Yes
includes目录模式列表No; defaults to all directories
includesfile要包含的文件的名称No
excludes必须排除的目录模式列表No; defaults to none
excludesfile要排除的文件的名称No
casesensitive用于指定是否应该应用区分大小写No; defaults to true
followsymlinks有一个符号链接可供遵循No; defaults to true
erroronmissingdir它指定如果基本目录不存在,则要发生什么No; defaults to true (for backward compatibility reasons)

例如:

<!--表示目录:${build.dir}下匹配所以的名字为apps/**/classes的目录且不包括名字为apps/**/*Test*的-->
<dirset dir="${build.dir}">
  <include name="apps/**/classes"/>
  <exclude name="apps/**/*Test*"/>
</dirset>
<!--选择${workingdir}下包含${markerfile}的所有文件-->
<dirset id="dirset" dir="${workingdir}">
   <present targetdir="${workingdir}">
        <mapper type="glob" from="*" to="*/${markerfile}"/>
   </present>
</dirset>

3.3.4 、FileList文件列表

    FileList是显式命名的文件列表。文件集充当过滤器,只返回文件系统中存在且与指定模式匹配的文件,而文件列表对于指定可能存在或不存在的文件非常有用。多个文件被指定为相对于指定目录的文件列表,不支持通配符扩展(带有通配符的文件名将包含在列表中,且不会更改)。

AttributeDescriptionRequired
dir此文件列表的基目录Yes
files文件名列表。这是用空格或逗号分隔的文件名列表。Yes, unless there is a nested file element
refid要包含的文件的名称No

使用案例:

<!--匹配:${doc.src}/foo.xml或${doc.src}/bar.xml-->
<filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml"/>
<!--或者把上面的类型放置在其他地方,而使用引用的方式匹配-->
<filelist refid="docfiles"/>

 3.3.5、 FileSet一组文件

    FileSet是一组文件。这些文件可以在从基本目录开始的目录树中找到,并通过从许多模式集和选择器中获取的模式进行匹配。模式集可以指定为嵌套的<patternset>元素。此外,文件集保存隐式模式集,并直接支持模式集的嵌套<include>、<includefile>、<exclude>和<excludesfile>元素以及模式集的属性。

AttributeDescriptionRequired
dir此文件列表的基目录Yes
file用于指定单文件FileSetNo; defaults to yes
defaultexcludes指示是否应使用默认排除No; defaults to all files
includes必须包含的文件模式列表。No
includesfile文件名,包含的No;
excludes必须排除的文件模式列表No;
excludesfile文件名,被排除的No;
casesensitiveincludeexclude模式都区分大小写。No; defaults to true
followsymlinks应遵循符号链接No; defaults to true
erroronmissingdir指定如果基目录不存在会发生什么情况。如果为true,将发生生成错误,如果为false,则文件集将被忽略/为空。自ApacheAnt 1.7.1以来No; defaults to true

使用案例:

<!--方式一:匹配:${server.src}/及其子目录下的*.java但是排除包含Test的文件-->
<fileset dir="${server.src}" casesensitive="yes">
  <include name="**/*.java"/>
  <exclude name="**/*Test*"/>
</fileset>

<!--方式二:也可以这样写-->
<fileset dir="${server.src}" casesensitive="yes">
  <filename name="**/*.java"/>
  <not>
    <filename name="**/*Test*"/>
  </not>
</fileset>

<!--方式三:也可以这样写-->
<fileset dir="src" includes="${server.src}/"/>

 3.3.6 、File Mapper Type文件映射类型

    File Mapper类型用于指定文件间的相互关系。有时在执行任务后,源文件和输出都不同,然后不进行映射。 Apache Ant使用FileMapper映射源和创建的目标文件。

AttributeDescriptionRequired
type用于指定一个具体的mapper实现的类型,Ant工具提供了内建支持,也可以编写Mapper类型的实现。type的类型很多,例如: identity、flatten、merge、glob、regexp、package、unpackage、composite、chained filtermapper、scriptmapper、firstmatchmapper、cutdirsmapperNo;
classname通过classname属性指定一个Mapper的实现类,并通过这个实现类需要实现Mapper的功能。classname和type两者必选其一,不能同时为空No; Exactly one of type or classname
classpath用于指定查找classname类型的Java类库,就是用于指定Java类依赖的classpathNo
classpathref用于引用path元素定义的classpath,这个classpath提供了编译和运行所依赖的类库No
from用于指定操作源、源文件的位置Depends on implementation
to用于指定操作的目标Depends on implementation

使用案例:

<!--
    type="identity" 什么都不做。fileset是什么就是什么;
    type="flatten"  目标文件名与源文件名相同,所有前导目录信息都被删除。(忽略路径只反文件名)
    type="merge" 合并,目标文件名始终相同。在git中它用来合并分支。
    type="glob"  加前缀和后缀
    type="regexp" from和to属性都需要并且定义正则表达式。
    type="package" 与glob语法相同,但是packagemapper会将匹配的源模式中的目录分隔符替换为“.”
    type="unpackage" Ant1.6引入,与glob语法相同,unpackage是package的反转。
    type="composite"  	Ant1.7引入,composite可以嵌套多个mapper。
    type="chained" Ant1.7引入,chained可以包含多个mapper。
-->
<!--merge:打包文件到archive.tar-->
<mergemapper to="archive.tar-->"/>
<!--glob,备份文件,这些类型都能用这两种方式-->
<!--方式一:将当前目录的所有的*.java,映射到目标目录*.java.bak-->
<mapper type="glob" from="*.java" to="*.java.bak"/>
<!--方式二:将当前目录的所有的*.java,映射到目标目录*.java.bak-->
<globmapper from="*.java" to="*.java.bak"/>

<!--filtermapper:Ant1.6.3引入,他的映射器实现将filterchain应用于源文件名-->
<filtermapper>
  <replacestring from="\\" to="/"/>
</filtermapper>
<!--Ant1.7引入,scriptmapper执行用支持Apache BSF或者JSR 223的语言编写的脚本。-->
<scriptmapper language="javascript">
  self.addMappedName(source.toUpperCase());
  self.addMappedName(source.toLowerCase());
</scriptmapper>
<!--Ant1.8引入,firstmatchmapper支持任意数量的mapper,返回第一个匹配的mapper的结果。-->
<firstmatchmapper>
  <globmapper from="*.txt" to="*.bak"/>
  <globmapper from="*A.*" to="*B.*"/>
</firstmatchmapper>
<!--cutdirsmapper:Ant1.8.2引入,从源文件名中去掉配置数量的目录。dirs="1"去掉第一层目录-->
<cutdirsmapper dirs="1"/>

3.3.7 、FilterSet 一组过滤器

    FilterSet类型的作用是定义一组的文件过滤器。在移动或者复制文件时对文件的内容进行替换。FileSet类型可以在target外进行定义,并在target内进行引用。当然也可以在target内直接嵌套使用。

AttributeDescriptionRequired
begintoken定义一个特殊的字符,这个特殊字符用于指定要过滤的字符串的开始位置。默认为@,如@DATE@No
endtoken定义一个特殊字符,这个特殊的字符用于指定要过滤的字符串的结束标识。默认为@,如@DATE@No
filtersfile指定单个筛选器文件(file属性指定文件)No
recurse用于表明是否可以查找更多的替换标志,默认为true。No
onmissingfiltersfile指示指定不存在的filtersfile时的行为。失败、警告、忽略之一。从Ant 1.7开始No

   在FilterSet类型中可以直接包含Filter类型,这个Filter定义具体的文件过滤器。

AttributeDescriptionRequired
token要替代的token的名字No
value指定替代值,这个值可引用变量No

使用案例:

1)在dist目录下新建一个aa.txt文本文件,内容如下:

-----开始替换默认模式@的起始位置
DATE
@DATE
@DATE@
----------结束位置
-----开始替换自定义模式%*的起始位置
DATE
%DATE
%DATE*
----------结束位置

 2)编写配置文件copyfilter.xml

<project name="MyProject" default="" basedir=".">
<property name="TODAY" value="20211028" />
<!--目录复制:将dist目录拷贝到dist_copy -->
<copy todir="dist_copy">
  <!--匹配dist目录下的所有的txt文本-->
  <fileset dir="dist">
      <include name="*.txt" />
  </fileset>
  <!--会默认查找复制的文件中的@DATE@开头和结尾的字符替换成指定的value-->
  <filterset>
    <filter token="DATE" value="${TODAY}"/>
  </filterset>
  <!--我们可以指定属于自己的标识会默认查找复制的文件中的%DATE*开头和结尾的字符替换成指定的value-->
  <filterset begintoken="%" endtoken="*">
    <filter token="DATE" value="${TODAY}"/>
  </filterset>
</copy>
</project>

3)案例执行及其效果

 

3.3.8 、PatternSet 定义模式集合

    PatternSet 类型可看作一个集合,在Ant构件文件中可以通过refid属性对已定义的PatternSet类型进行引用。PatternSet 类型可用于FileSet类型和DirSet类型中,用于定义文件或目录的匹配集合。

AttributeDescriptionRequired
includes用于指定PatternSet里所要包含的文件模式。这个属性可指定多个被包含的文件的模式,相当于用一个list来保存文件模式All files are included.
includesfile用于指定要包含的具体的文件See includes
excludes用于指定PatternSet中将不被包含的文件模式。这个属性与includes属性的作用刚好相反No files except default excludes are excluded.
excludesfile用于指定不被包含的具体文件See excludes

使用案例:

<!--匹配所以不包含名字为Test的java文件,还可以多个include-->
<patternset id="non.test.sources">
  <include name="**/*.java"/>
  <exclude name="**/*Test*"/>
</patternset>

3.3.9 、Selectors 选择元素

    selector类型可看作是FileSet类型中的一个元素,selector在FileSet类型内部使用,用于对文件进行筛选。使用selector类型时可以在target外定义selector类型,然后通过refid属性进行引用。不同的selector具有不同的属性,而且在一些selector中可以包含另外的selector,通常把这些能包含其他selector的selector看作selector容器。

Core Selectors:

selectorselector描述
<contains>选择包含特定文本字符串的文件
<date>可用于选择文件的修改时间在某个特定的时间之前或之后的文件
<depend>用于比较两个不同目录下名称相同的文件,然后选择文件修改时间最迟的那个文件 targetdir属性:指定进行比较的目标文件目录。 granularity属性:用于指定一个文件修改时间的允许误差,取值为毫秒数
<depth>用于指定选择文件的文件目录的深度
<different>从两个目录中选择被认为不同的文件
<filename>选择符合指定文件匹配模式的文件
<type>指定要选择目录还是文件
<size>选择大于或小于特定字节数的文件
<readable>选择可读的文件
...官文上20个

使用案例:

1)新建三个html文件,两个包含/一个不包含<script>标签的文件;

2)新建:selectrq.xml

<project name="MyProject" default="dist" basedir=".">
   <target name="dist" description="contains use">
      <!--复制文件到-->
      <copy todir="dist_copy">
	      <!--匹配文件dist/*html-->
	      <fileset dir="dist" includes="*.html">
		    <!--选中文件中包含script的标签-->
            <contains text="script" casesensitive="no"/>
          </fileset>
	  </copy>
  </target>
</project>

3)案例效果:

3.1.10、ZipFileSet zip格式的文件集

    ZipFileSet类型可看作是一种特殊的FileSet类型。通过Ant工具内建的zip任务实现打包zip文件的功能。ZipFileSet具有两种不同的形式:

1)当ZipFileSet中的src属性被使用,那么目录src下的文件会以zip文件格式进行组织。

2)当ZipFileSet中的dir属性被使用,那么目录dir下的文件将以文件系统的形式进行组织。

AttributeDescriptionRequired
prefix用于定义ZipFileSet中的文件路径的前缀,符合这个前缀的文件将被打包No
fullpath用于定义ZipFileSet中包含的文件的全路径No
src用于替代当前的目录位置,这个src指定目录下的文件将以zip文件的格式进行打包No
filemode用于定义文件的权限形式,在UNIX或Linux下使用。No; default is 644
dirmode用于定义目录的权限形式,在UNIX或Linux下使用No;default is 755
encoding指定zip文件中的文件名使用的字符编码No; default JVM character encoding
erroronmissingarchive指定如果存档不存在会发生什么情况。如果为true,将发生生成错误;No; defaults to true,Ant 1.8.0

 使用案例:

1)在dist目录有三个html文件和一个包含index.html的压缩包examples.zip。

2)编写zip.xml

<project name="MyProject" default="dist" basedir=".">
   <target name="dist" description="zip demo">
      <zip destfile="dist/myhtml.zip">
	    <!--以zip的形式(myhtml.zip)打包dist目录下的html文件到deploy目录下-->
	    <zipfileset dir="dist" prefix="deploy" includes="*.html"/>
		<!--并且添加zip.xml文件到deploy目录下一起打包-->
	    <zipfileset dir="." includes="zip.xml" fullpath="deploy/zip.xml"/>
		<!--同时以zip的形式(com.zip)打包dist/class/目录下的所有文件到deploy/src目录下-->
		<zipfileset src="dist/examples.zip" includes="**/*.html" prefix="src/"/>
	  </zip>
  </target>
</project>

3)执行ant命令及案例效果

3.1.11、TarFileSet tar格式的文件集

  ant1.7起,TarFileSet已经做为独立的类型。可以为tarfileset定义一个id属性,并且通过refid来对其进行引用。tarfileset是特殊格式的fileset,具有两种不同的形式: ​

1)当使用src属性或嵌套资源集合时,tarfileset用src中找到的文件做为tar条目。 ​

2)当使用dir属性时,tarfileset用dir下找到的文件系统文件做为tar条目。

AttributeDescriptionRequired
prefix用于定义TarFileSet 中的文件路径的前缀,符合这个前缀的文件将被打包No
fullpath用于定义TarFileSet 中包含的文件的全路径No
src用于替代当前的目录位置,这个src指定目录下的文件将以tar文件的格式进行打包No
filemode用于定义文件的权限形式,在UNIX或Linux下使用。No; default is 644
dirmode用于定义目录的权限形式,在UNIX或Linux下使用No;default is 755
usernametar条目的用户名,与UID不同No
grouptar条目的组名No

使用案例:

<!--下载归档文件some-archive.tar.bz2,动态解压缩它,将lib目录的内容复制到some目录中,并丢弃归档文件的其余部分-->
<copy todir="some-dir">
 <tarfileset includes="lib/**">
   <bzip2resource>
     <url url="https://example.org/dist/some-archive.tar.bz2"/>
   </bzip2resource>
 </tarfileset>
</copy>

3.4、Ant其他常见的一些用法说明

3.4.1、available 任务

AttributeDescriptionRequired
property要设置的属性的名称。Yes
value要设置属性的值. Defaults to "true". 默认是trueNo
classnameclass类的类名称Yes
file文件路径
resourceThe resource to look for in the JVM.看在JVM的资源。
classpathThe classpath to use when looking upclassname orresource.用于当有classname和resource属性的时候No
filepathThe path to use when looking up file. 路径当有file节点的时候No
classpathrefThe classpath to use, given as a reference to a path defined elsewhere.classpath中使用,因为在别处定义的路径作为一个参考。No
typeThe type of file to look for, either a directory (type="dir") or a file (type="file"). If not set, the property will be set if the name specified in the file attribute exists as either a file or a directory.No
<!--如未显示指定value,当检查到被评定的东西,property的值默认为true-->
<available  property="属性名" file | classname | resource = "被判定是否存在的东西" value="给属性名显示指定一个值"/>

使用案例:  

<project name="MyProject" default="dist" basedir=".">
   <property name="a" value="a"/>
   <property name="b" value="b"/>
   <property name="a,b" value="c"/>
   <!--这里的if="a,b"是一个,并不是两个,匹配到了,打印出a-->
   <target name="dist" description="zip demo" if="a,b">
	  <echo>${a}</echo>
  </target>
</project>

3.4.2、native2ascii 任务

<!--将配置文件(*.xml)转为.properties文件
	ext:重命名输出文件时使用的文件扩展名
-->
<native2ascii encoding="GBK" src="config" dest="WEB-INF" includes="*.xml"
			ext=".properties" />

以上是关于Ant的使用简介的主要内容,如果未能解决你的问题,请参考以下文章

jmeter+Ant+Jenkins开展接口自动化测试集成

Ant简介

001-快速构建系统(Spring Boot + ant Design新版全开源)简介

001-快速构建系统(Spring Boot + ant Design新版全开源)简介

Apache Ant 简介和配置

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段