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 引用的一组模式) |
Selectors | FileSet元素有助于选择元素 |
TarFileSet | tar格式的文件集,它是FileSet的一种特殊形式,ant1.7起 |
ZipFileSet | zip格式的文件集,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.jar | https://commons.apache.org/bcel/ | 注意版本:bcel-6.5.0需要jdk8,可以下载bcel-6.0 |
jython.jar | https://www.jython.org/ | Python with script task |
jakarta.mail.jar | https://eclipse-ee4j.github.io/mail/ | |
jruby.jar | https://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>的属性。
Attribute | Description | Required |
---|---|---|
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是显式命名的文件列表。文件集充当过滤器,只返回文件系统中存在且与指定模式匹配的文件,而文件列表对于指定可能存在或不存在的文件非常有用。多个文件被指定为相对于指定目录的文件列表,不支持通配符扩展(带有通配符的文件名将包含在列表中,且不会更改)。
Attribute | Description | Required |
---|---|---|
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>元素以及模式集的属性。
Attribute | Description | Required |
---|---|---|
dir | 此文件列表的基目录 | Yes |
file | 用于指定单文件FileSet | No; defaults to yes |
defaultexcludes | 指示是否应使用默认排除 | No; defaults to all files |
includes | 必须包含的文件模式列表。 | No |
includesfile | 文件名,包含的 | No; |
excludes | 必须排除的文件模式列表 | No; |
excludesfile | 文件名,被排除的 | No; |
casesensitive | include 和exclude 模式都区分大小写。 | 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
映射源和创建的目标文件。
Attribute | Description | Required |
---|---|---|
type | 用于指定一个具体的mapper实现的类型,Ant工具提供了内建支持,也可以编写Mapper类型的实现。type的类型很多,例如: identity、flatten、merge、glob、regexp、package、unpackage、composite、chained filtermapper、scriptmapper、firstmatchmapper、cutdirsmapper | No; |
classname | 通过classname属性指定一个Mapper的实现类,并通过这个实现类需要实现Mapper的功能。classname和type两者必选其一,不能同时为空 | No; Exactly one of type or classname |
classpath | 用于指定查找classname类型的Java类库,就是用于指定Java类依赖的classpath | No |
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内直接嵌套使用。
Attribute | Description | Required |
---|---|---|
begintoken | 定义一个特殊的字符,这个特殊字符用于指定要过滤的字符串的开始位置。默认为@,如@DATE@ | No |
endtoken | 定义一个特殊字符,这个特殊的字符用于指定要过滤的字符串的结束标识。默认为@,如@DATE@ | No |
filtersfile | 指定单个筛选器文件(file属性指定文件) | No |
recurse | 用于表明是否可以查找更多的替换标志,默认为true。 | No |
onmissingfiltersfile | 指示指定不存在的filtersfile时的行为。失败、警告、忽略之一。从Ant 1.7开始 | No |
在FilterSet类型中可以直接包含Filter类型,这个Filter定义具体的文件过滤器。
Attribute | Description | Required |
---|---|---|
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类型中,用于定义文件或目录的匹配集合。
Attribute | Description | Required |
---|---|---|
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:
selector | selector描述 |
---|---|
<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下的文件将以文件系统的形式进行组织。
Attribute | Description | Required |
---|---|---|
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条目。
Attribute | Description | Required |
---|---|---|
prefix | 用于定义TarFileSet 中的文件路径的前缀,符合这个前缀的文件将被打包 | No |
fullpath | 用于定义TarFileSet 中包含的文件的全路径 | No |
src | 用于替代当前的目录位置,这个src指定目录下的文件将以tar文件的格式进行打包 | No |
filemode | 用于定义文件的权限形式,在UNIX或Linux下使用。 | No; default is 644 |
dirmode | 用于定义目录的权限形式,在UNIX或Linux下使用 | No;default is 755 |
username | tar条目的用户名,与UID不同 | No |
group | tar条目的组名 | 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 任务
Attribute | Description | Required |
---|---|---|
property | 要设置的属性的名称。 | Yes |
value | 要设置属性的值. Defaults to "true". 默认是true | No |
classname | class类的类名称 | Yes |
file | 文件路径 | |
resource | The resource to look for in the JVM.看在JVM的资源。 | |
classpath | The classpath to use when looking upclassname orresource .用于当有classname和resource属性的时候 | No |
filepath | The path to use when looking up file . 路径当有file节点的时候 | No |
classpathref | The classpath to use, given as a reference to a path defined elsewhere.classpath中使用,因为在别处定义的路径作为一个参考。 | No |
type | The 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的使用简介的主要内容,如果未能解决你的问题,请参考以下文章
001-快速构建系统(Spring Boot + ant Design新版全开源)简介
001-快速构建系统(Spring Boot + ant Design新版全开源)简介
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段