Ant核心类型

前言:Ant工具内置提供了一些有用的类型,这些类型相当于Java系统中的变量用于存储执行过程中的信息。利用Ant工具提供的核心类型能方便地定义变量,并可在target中进行引用。所有的Ant工具的类型都具有id和refid这两个属性,id作为这个类型的唯一标示,而refid用于指定要引用的类型,指定refid为要引用的类型的id。
针对基础部分请参考:Ant基础入门篇

 1.Assertions Type:断言类型

断言类型可在 <java> 和 <junit>  任务(task)中引用。当断言失败时会抛出java.lang.AssertionError的异常。

1.1 断言类型的属性及功能

在Ant工具中assertions类型只有一个属性:enableSystemAssertions,这个属性表示是否允许系统断言的功能。默认为unspecified,代表没有指定;当属性为true时才代表允许使用系统的断言,JVM会输出相应的断言信息;属性为false代表不允许使用系统断言。
Assertion类型中可以包含另外的一些类型:enable、disable。

1.1.1 enable类型

指定在特定的代码中允许使用断言。如果没有指定具体的代码,则所有的代码将允许使用断言。enable类型包含两个属性:

  •  class属性:指定允许执行断言的类的名字
  •  package属性:指定允许执行断言的Java包。在这个包下的类将允许执行断言,包括这个包下的子包中的类

1.1.2 disable类型

这个类型作用于enable类型正好相反,指定哪些类不允许执行断言。由于默认时断言是disable类型的,因此只有当父包为enable类型同时要指定子包或这个包下的具体某个类为disable类型(不允许执行断言),这时disable类型就派上用场了。disable类型包含以下两个属性:
 

  •  class属性:指定不允许执行断言的类的名字
  •  package属性:指定不允许执行断言的Java包。在这个包下的类将不允许执行断言,包括这个包下的子包中的类

1.2 通过断言类型让Ant工具执行Java断言的实例

1.2.1 所有用户代码允许执行断言的断言类型

<assertions>
	<enable/>
</assertions>

这个例子表示所有用户定义的Java类允许执行Java断言,但不包括JDK中的类库。

1.2.2 允许单个Java class执行断言

<assertions>
	<enable class="Test"/>
</assertions>

允许名为Test的类执行断言

1.2.3 在某个Java包下允许执行断言

<assertions>
	<enable package="org.apache"/>
</assertions>

包前缀为org.apache下的Java类允许执行断言。

1.2.4 允许系统断言

<assertions enableSystemAssertions="true">
	<enable package="org.apache"/>
	<disable package="org.apache.tools.ant"/>
	<enable class="org.apache.tools.ant.Main"/>
</assertions>

这里允许系统断言,其中的enable与disable用法与上面类同。

1.2.5 断言参照引用

<assertions id="project.assertions">
	<enable package="org.apache.test"/>
</assertions>
<assertion refid="project.assertions"/>

这两个断言类型执行效果一样,都允许包前缀为org.apache.test下的类执行断言,第二个assertions类型是通过refid引用已定义的断言类型实现的。

2. Description Type:描述类型(对功能进行说明)

Description类型主要用于对功能或者一些需要说明的地方进行说明,让用户可以了解这个功能的作用,当运行构件文件时会输出这些Description类型的信息。Description类型不包含任何参数,可在target内使用,也可以放在全局的构件文件中使用。

3. PatternSet Type:定义模式集合可在FileSet和DirSet中引用

PatternSet类型可看做一个集合,在Ant构件文件中可以通过refid属性对已定义的PatternSet类型进行引用。PatternSet类型可用于FileSet类型和DirSet类型中,用于定义文件或目录的匹配集合。在PatternSet类型中可以使用 <include> 和 <exclude> 类型定义包含或不包含的文件模式,当然可以包括本身的属性。

3.1 模式结合类型属性及功能

PatternSet类型具有以下4个属性:

  •  includes属性:用于指定PatternSet里所要包含的文件类型。如果includes属性没有被指定,则表示将包含所有文件。
  •  includesfile属性:用于指定要包含的具体的文件。可以用property元素指定具体的文件,然后在includesfile属性中引用这个属性。当然也可以通过 <includesfile>  类型来指定多个被包含的文件。
  •  excludes属性:用于指定PatternSet中将不被包含的文件模式。如果属性没有指定,则将不排除任何文件。
  •  excludesfile属性:用于指定不被包含的具体文件,与includesfile属性的作用正好相反。

可以看出上面的都是复数形式,因此都是可以指定多个的,下面是上面四个属性中可以嵌套的类型

3.1.1 include类型

用于指定要包含的文件的匹配模式,符合这个模式的文件将被包含。
这个类型具有以下3个属性:

  •  name:指定包含的文件的模式
  •  if:用于指定执行的条件限制,如果if属性所引用的属性已经被设定,那么将会使用这个文件模式。
  •  unless:指定一个与if属性相反的条件限制。

3.1.2 exclude类型

用于指定不被包含的文件模式,符合文件模式的文件将不被包含。
这个类型也有以下3个模式:

  • name
  • if
  • unless

3.1.3 includesfile类型

用于指定PatternSet类型中要包含的文件的名称或路径,可嵌套于PatternSet类型中。
includesfile类型包括以下3个属性:

  • name
  • if
  • unless

3.1.4 excludesfile类型

用于指定PatternSet类型中不被包含的文件的名称或路径,可嵌套于PatternSet类型中。
excludesfile类型包括以下3个属性:

  • name
  • if
  • unless

3.2 通过模式集合类型来定义文件集合的实例

包含所有名称不包含Test的.java文件的示例:

<patternset id="non.test.sources">
	<include name="**/*.java"/>
	<exclude name="**/*Test*.java/>
</patternset>

引用已定义的PatterSet类型的示例:

<patternset refid="non.test.sources"/>

在PatterSet类型中使用includesfile类型的例子:

<patternset includesfile="some-file"/>
<!--与下面的PatterSet定义作用一样-->
<patternset>
	<includesfile name="some-file"/>
</patternset>

通过引用property元素定义的文件模式的PatterSet类型的例子:

<patternset>
	<includesfile name="some-file"/>
	<includesfile name="${some-other-file}" if="some-other-file"/>
</patternset>

4. DirSet Type:定义文件目录集合

DirSet 类型用于定义文件目录的集合。这组目录可以在根目录的文件树中查找到,也就是说位于构件文件指定的根目录下。
在DirSet类型中可以引用PatternSet类型,通过PatternSet类型指定符合要求的目录。同时在DirSet类型中也可以直接使用 <include>,<includesfile>,<exclude>和<excludesfile>  类型,用于指定符合要求的目录。多数情况下会在target中直接嵌套使用DirSet类型,也可以通过refid引用已定义的DirSet类型。

4.1 目录集合类型属性及功能

DirSet类型具有以下7个属性:

  • dir属性:用于指定DirSet类型可以访问的目录树的根节点。这个属性是必须的。
  • includes属性:用于指定DirSet类型中包含的文件。
  • includesfile属性:用于指定在DirSet类型中要包含的文件。
  • excludes属性:用于指定在DirSet类型中不被包含的文件。
  • casesensitive属性:用于指定文件目录匹配时是否大小写敏感。属性设置为yes,true或on时表示敏感;设置为no,false或off时表示不敏感。默认情况下是大小写敏感。
  • followsymlinks属性:用于指定是否采用与操作系统类型相关的属性(比如文件路径分隔,在Windows和Linux下不一样),默认为true,即使用系统相关的属性。

4.2 使用include、exclude类型定义目录集合的实例

<dirset dir="${build.dir}">
	<include name="apps/**/classes"/>
	<exclude name="apps/**/*Test*"/>
</dirset>

这个目录集合的根目录为${build.dir}指定的位置。

4.3 使用PatternSet Type来定义目录集合的实例

<dirset dir="${build.dir}">
	<patternset id="non.test.classes">
		<include name="apps/**/classes"/>
		<exclude name="apps/**/*Test*"/>
	</patternset>
</dirset>

然后其他DirSet类型可直接引用上面定义的PatternSet,如下:

<dirset dir="${build.dir}">
	<patternset refid="non.test.classes"/>
</dirset>

5. FileSet Type:定义文件集合

FileSet类型可用于定义文件集合。在FileSet类型中可以引用PatternSet类型和Selector类型来指定集合中包含的文件。FileSet类型可以在target元素中引用,也可以直接在target元素中嵌套使用。

5.1 文件集合属性及功能

  • dir属性:指定FileSet类型引用的根目录,FileSet类型所包含的文件都基于这个根目录。
  • file属性:用于指定要包含的单个文件。在FileSet类型中至少需要指定file属性或者dir属性。
  • defaultexcludes属性:用于指定是否忽略Ant工具中默认的将不被包含的文件模式。**取值为yes代表忽略,no代表不忽略。** 在Ant工具中默认不包含的文件模式如下: **/*~,**/#*#,**/%*%,**/._*,**/CVS,**/.cvsignore,**/SCCS,**/SCCS/**,**/vssver.scc,**/.svn,**/.svn/**,**/.DS_Store 
  • includes属性:用于指定文件集合所包含的文件,默认时包含根目录下的所有文件。可以指定多个文件的匹配模式使用逗号或空格符进行分隔。
  • includesfile属性:用于指定文件集合所包含的文件的名称。
  • excludes属性:作用是指定文件集合将不包含的文件,默认时只忽略满足上面所说的Ant工具默认不包含的文件模式的文件。
  • excludesfile属性:用于指定文件集合中不包含的文件的名称。
  • casesensitive属性:用于定义文件匹配时是否大小写敏感。取值为yes、true或on时表示大小写敏感;反之no、false或off。默认时为大小写敏感。
  • followsymlinks属性:用于指定是否采用与操作系统相关的属性(比如文件路径分隔),默认为true表示使用系统相关的属性,Ant会根据操作系统的不同,使用不同的属性。

5.2 常用selector及其功能:通过selector对文件进行筛选

selector是一个泛指,selector类型可看作FileSet类型中的一个元素,可以直接在target类型内部使用,也可以在其外部定义然后通过refid属性进行引用,来实现对文件进行筛选。不同的selector中具有不同的属性,且一部分可以包含其他的selector。

5.2.1 contains

contains这个 selector只选择包含text属性中指定的字符串的文件。
包含的属性:

  • text属性:用于指定每个文件必须包含的字符串,只有包含这个字符串的文件才能被包含。这个属性是必须的,且不能为空。
  • casesensitive属性:用于指定字符串是否大小写敏感。默认为true(敏感)
  • ignorewhitespace属性:用于指定是否忽略text属性中的空格。默认为false(不忽略)

实例:

<fileset dir="$doc.path}" includes="**/*.html">
	<contains text ="script" casesensitive="false"/>
</fileset>

作用:选择所有包含script字符串的html文件。

5.2.2 date

date selector可用于选择文件的修改时间在某个特定的时间之前或之后的文件。
包含的属性:

  • datetime属性:指定一个用于比较的特定时间。格式为:MM/DD/YYYY HH:MM AM 或PM (eg: 09/09/2006 10:10 am)
  • millis属性:指定一个毫秒数作为时间间隔,这个毫秒数从1970年零时零分开始计算。大多数情况下建议使用datetime属性。datetime属性和millis属性必须有一个不能为空
  • when属性:定义如何进行比较。
    • before:文件修改时间在这个特定时间之前
    • after:文件修改时间在这个特定时间之后
    • equals:文件修改时间等于这个特定时间(默认情况为equals)
  • granularity属性:用于指定一个文件修改时间间隔的允许误差,这个误差为毫秒数。
  • pattern属性:用于指定解释datetime属性时是否兼容Java中SimpleDateFormatter的格式。
  • checkdirs属性:checkdirs属性指定是否检查文件目录的创建日期,默认为false。
<fileset dir="${jar.path}" includes="**/*.jar">
	<date datetime="01/01/2000 12:00 AM" when="before"/>
</fileset>

作用:选择 ${jar.path} 目录下所有修改在 "01/01/2000 12:00 AM" 之前的.jar文件。

5.2.3 depend

depend selector用于比较两个不同目录下名称相同的文件,然后选择文件修改时间最迟的那个文件,在depend selector
包含的属性:

  • targetdir属性:指定进行比较的目标文件目录
  • granularity属性:用于指定一个文件修改时间的允许误差,取值为毫秒数。
<fileset dir="{ant.1.5/src/main} includes="**/*.java">
	<depend targetdir="$ant.1.4.1}/src/main"/>
</fileset>

作用:选择相对于Ant 1.4 版本在Ant 1.5版本中修改过的Java源文件。

5.2.4 depth

depth selector用于指定选择文件的文件目录的深度。
包含的属性:

  • min属性:作用是定义一个距离根目录的最小的深度,大于这个深度的目录下的文件允许被选择
  • max属性:作用定义一个距离根目录的最大深度。

max属性或min属性其中一个必须被指定

<fileset dir="${doc.path}" includes="**/*">
	<depth max="1"/>
</fileset>

作用:选择根目录下的所有文件和根目录下的第一层子目录下的所有文件。

5.2.5 different

different selector 的作用是从两个目录中选择被认为不同的文件。
文件被认为不同的条件有:

  1. 当只有一个目录而不存在另一个指定的目录时,这些文件被认为不同
  2. 当位于两个目录的文件具有不同的文件长度,那么这两个文件被认为不同
  3. 如果ignoreFileTime属性没有设定为off,文件的修改时间不同将会被认为文件不相同
  4. 如果ignoreContents属性没有设定为true,将会一个一个字节地对这两个文件进行对比,以确认是否不同。

包含的属性:

  • targetdir属性:用于指定一个目录,这个目录下的文件与FileSet中的dir属性指定的目录中的文件进行对比。
  • ignoreFileTimes:用于指定对比时是否忽略文件的修改时间,默认为true,代表忽略。
  • ignoreContents属性:用于指定是否需要一个一个字节地进行对比,默认为false。
  • granularity属性:用于指定一个文件修改时间的允许误差,取值为毫秒数。

 

<fileset dir=${ant.1.5}/src/main" includes="**/*.java">
	<different targetdir=${ant.1.4.1}/src/main" 
		ignoreFileTimes="true"/>
</fileset>

作用:对比Ant工具1.4和1.5 版本中的Java源文件,从中选择不相同的文件,选择过程忽略文件的修改时间。

5.2.6 filename

filename selector的作用是选择符合指定文件模式匹配的文件,通常为文件名匹配。与PatternSet中的 <include>和<exclude> 。
包含的属性:

  • name属性:用于指定被选择的文件的名称,name属性可以包含Ant工具的通配符,这个属性是必需的。
  • casesensitive属性:用于指定文件名是否大小写敏感,默认为true。
  • negate属性:用于指定这个selector将起相反的作用,不满足selector的文件被选中,相当于有 <include> 转为 <exclude>  的功能,默认为false。
<fileset dir="${doc.path}" includes="**/*">
	<filename name="**/*.css*/"/>
</fileset>

作用:选择所有的css样式文件

5.2.7 present 

present selector 的作用是指定一个与FileSet中的目录相对应的目录,并从FileSet的目录里选择selector指定的目录中不存在或两个目录中都存在的文件。
包含的属性:

  • targetdir属性:是必须的,用于指定要进行比较的目录(这个属性指定的目录将于FileSet中指定的dir目录进行比较)
  • present 属性:用于指定是否只需要选取在FileSet指定的目录中存在,但在targetdir指定的目录中不存在的文件;或者选取两个目录中都存在的文件。如果present属性设为scronly,代表只从FileSet的源文件目录(dir属性指定)选取targetdir指定的目录中不存在的文件;如果present属性设为both,代表从FileSet指定的目录和targetdir指定的目录中选择两个目录都存在的文件。
<fileset dir="${ant.1.5}/src/main" includes="**/*.java">
	<present present="srconly" targetdir="${ant.1.4.1}/src/main"/>
</fileset>

作用:从Ant1.5的src.main包中选择在Ant 1.4的src.main包中不存在的Java源文件。

5.2.8 containsregexp

containsregexp selector的作用是选择符合规则正则表达式的文件。
包含的属性:

  • expression属性:用于定义一个规则表达式(正则表达式)

5.2.9 size

size selector的作用是通过文件的大小对文件进行选择,选择条件可为文件大小大于或小于指定的大小的文件。
包含的属性:

  • value属性:作用是设定用于比较的文件大小,为数字。
  • units 属性:用于指定value属性的单位,常用的单位有SI标准的K,M和G。(K=1000bytes,M=1000K,G=1000M)
  • when属性:用于设定如何解释size selector,可设定为大于,小于或等于指定的文件的大小。
    • less:表示小于
    • more:表示大于
    • equal:表示等于
<fileset dir="${jar.path}">
	<patternset>
		<include name="**/*.jar"/>
	</patternset>
	<size value="4" units="K" when="more"/>
</fileset>

作用:在 ${jar.path} 指定的目录下,选择所有大于4096bytes的jar文件

5.2.10 type

type selector用于指定要选择目录还是文件。
包含的属性:

  • type属性:设定为dir表示选择目录,如果设定为file则表示选择规则文件

5.3 使用dir、include、exclude等属性定义文件集合的实例

下面通过FileSet类型内置的属性来定义文件集合的例子。这个文件集合包含根目录${server.src}下的所有Java文件,但不包含文件名称中含有Test字符的子文件。

<fileset dir=${server.src}" casesensitive="yes">
	<include name="**/*.java"/>
	<exclude name="**/*Test*"/>
</fileset>

另外,还可以使用filename这个类型对文件名称进行指定,通过filename类型来实现上面的功能的例子如下:

<fileset dir=${server.src}" casesensitive="yes">
	<filename name="**/*.java"/>
	<filename name="**/*Test*"/ negate="true">
</fileset>

negate="true"相当于exclude这些文件。

5.4 使用PatternSet Type来定义文件集合的实例

<fileset dir=${server.src}" casesensitive="yes">
	<patternset id="non.test.sources">
		<include name="**/*.java"/>
		<exclude name="**/*Test*"/>
	</patternset>
</fileset>

如果在构件文件中已定义了PatternSet类型,那么也可以通过PatternSet的引用实现同样地功能。

<fileset dir=${server.src}">
	<patternset refid="non.test.sources"/>
</fileset>

6. FileList Type:定义文件列表

FileList类型用于定义一个文件列表。这个文件列表可以包含存在或不存在的文件,与FileSet类型不同,FileSet类型指定的文件一定要存在。FileList类型可以在target外部定义,在target内部对FileList进行引用,也可以嵌套使用。

6.1 文件列表类型属性及功能

  • dir属性:用于指定文件列表的根目录,这个属性是必须的
  • files属性:用于指定文件列表中所包含的文件。可以使用逗号或空格符进行分隔,用于指定多个文件。

在Ant1.7中将支持在FileList中通过file元素来指定具体的文件。file元素只包含name这个属性,name属性用于指定具体的文件。

6.2 文件列表类型实例

(1)包含多个文件的文件列表例子:

<filelist id="docfiles" dir="${doc.src}" files="foo.xml,bar.xml" />

这个例子指定文件列表包含 ${doc.src} 目录下的foo.xml和bar.xml这两个文件。
(2)FileList引用例子:

<filelist id="docfilesref" refid="docfiles"/>

(3)使用file元素指定文件以实现与例(1)相同的功能,指定相同的文件列表:

<filelist id="docfiles" dir="${doc.src}">
<file name="foo.xml"/>
<file name="bar.xml"/>
</filelist>

7. FilterSet Type:文件过滤器定义

FilterSet类型的作用是定义一组的文件过滤器。在移动或者复制文件时对文件的内容进行替换。

7.1 文件过滤器类型属性及功能

包含的属性:

  • begintoken属性:定义一个特殊的字符,这个特殊字符用于指定要过滤的字符串的开始位置。默认为@,如@DATE@。
  • endtoken属性:定义一个特殊字符,这个特殊字符用于指定要过滤的字符串的结束标识。默认为@,如@DATE@。
  • recurse属性:用于表明是否可以查找更多的替换标志,默认为true。

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

  • token属性:要替代的token的名字
  • value 属性:指定代替值,这个值可引用变量

在FilterSet类型中可以直接包含FiltersFile类型。FiltersFile类型用于指定一个Java properties文件,利用该属性文件的属性名的属性值对应关系进行替换。FiltersFile类型具有一个必需的属性file,用于指定属性文件的名称。

7.2 通过文件过滤器替换文件内容实例

在复制文件时替换文件的版权和创建时间的例子。下面这个例子中的文件过滤器将替换文件中的@BUILD_DATE@和@VERSION@:

<target name="tokenFilterDemo" >
	<!-- 通过timestamp获取当前系统时间作为build_date -->
	<tstamp>
		<format property="now" pattern="MMMM d yyyy hh:mm aa"/>	
	</tstamp>
	<copy todir="build" filtering="true">
		<fileset dir="src">
			<include name="**/*.java"/>
		</fileset>
		<!-- 查询 @COPYRIGHT@ 和 @BUILD_DATE@ -->
		<filterset>
			<filter token="BUILD_DATE" value="${now}"/>
			<filter token="COPYRIGHT" value="Copyright(C) 2006 O'Reilly"/>
		</filterset>				
	</copy>	
</target>

作用:替换所有.java文件中的版权信息和创建时间。
对上面的文件进行测试,新建build.xml文件,并创建src,在其中写入一个java文件,内容如下:

构建时间:@BUILD_DATE@
版权:@COPYRIGHT@

控制台中输入ant,我的运行结果如下:

构建时间:十二月 13 2016 12:42 下午
版权:Copyright(C) 2006 O'Reilly

7.3 自定义替换符的文件过滤器实例

定义替换开始符号位“%”,替换结束符的符号位“!”:

<!-- 复制文件时进行过滤 -->
<copy file="${build.dir}/version.txt}" toFile="{dist.dir}/version.txt">
	<filterset >
		<filterset begintoken="%" endtoken="!"/>
		<filter token="DATE" value="$TODAY}"/>
	</filterset >
</copy>

7.4 通过属性文件进行过滤的文件过滤器实例

在对文件进行过滤时,为了统一管理,可能把所有的替换字符串放到一个.properties的属性文件中。然后通过FilterSet进行过滤。
替换前src.txt的内容:

This is the test sample.
the message will be replace: #MESSAGE!

abc.properties文件中的内容:

MESSAGE=HELLO

构件文件的内容:

<?xml version="1.0"?>
<project name="porject1" default="target1">
	<target name="target1">
		<copy toDir="afterReplace">
			<fileset dir="." >
				<include name="src.txt" />
			</fileset>
			<filterset begintoken="#" endtoken="!">
				<filtersfile file="abc.properties"/>
			  </filterset>
		</copy>
	</target>
</project>

作用:把src.txt文件复制到afterRepalce目录下,同时使用acb.properties中的内容去替换#MESSAGE!。

8. PropertySet Type:定义属性集合

在Ant1.6之后,提供了Property类型。

8.1 属性集合类型的属性及功能

在PropertySet中可以通过Propertyref类型引用构件文件中的其他property。而PropertySet类型之间可以相互作用。
PropertySet类型包含的属性:

  • dynamic属性:用于指定是否动态地加载PropertySet。默认为true。
  • negate属性:用于指定一个否定的属性集,如果为true代表返回除PropertySet外的属性。默认为false。

Propertyref类型可以引用当前构件文件中已定义的属性。
Propertyref类型包含的属性:

  • name属性:用于指定要引用的属性的名称
  • perfix属性:用于指定字符串的开头,所有以这个字符串开头的属性都会被引用
  • regex属性:用预定一个表达式(可使用Java支持的正则表达式),Propertyref类型只引用复合表达式的属性
  • builtin属性:用于引用Ant工具内建的属性、系统属性以及命令行输入的属性。如果builtin取值为all,代表取所有的内建属性、系统属性和命令行输入的属性都会被引用

8.2 使用属性集合的实例

(1)定义一个projectset,在这个属性集合中将包含构件文件中已定义的属性,代码如下:

<property name="lib1" value="lib1path"/>
<property name="lib2" value="lib2path"/>
<propertyset id="projectset1">
	<propertyref name="lib1" />
	<propertyref name="lib2" />
</propertyset>

作用:定义一个属性集合projectset1,这个集合包含名字为lib1和lib2的两个属性。
(2)PropertySet间相互引用

<property name="lib1" value="lib1path"/>
<property name="lib2" value="lib2path"/>
<propertyset id="projectset1">
	<propertyref name="lib1" />
	<propertyref name="lib2" />
</propertyset>
<propertyset id="projectset2">
	<propertyset refid="projectset1"/>
</propertyset>

9. File Mapper Type:文件映射类型(定义文件间的相互关系)

File Mapper类型用于指定文件间的相互关系。通常用于指定Java源文件和目标文件的相关性。

9.1 文件映射类型的属性及功能

 

 

  1.  type属性:用于指定一个具体的mapper实现的类型,Ant工具提供了内建支持,也可以编写Mapper类型的实现。
  2.  classname属性:通过classname属性指定一个Mapper的实现类,并通过这个实现类需要实现Mapper的功能。classname和type两者必选其一,不能同时为空。
  3.  classpath属性:用于指定查找classname类型的Java类库,就是用于指定Java类依赖的classpath。
  4.  classpathref属性:用于引用path元素定义的classpath,这个classpath提供了编译和运行所依赖的类库。
  5.  from属性:用于指定操作源、源文件的位置。
  6.  to属性:用于指定操作的目标

在Ant工具中内置提供了一些有用的Mapper类型的实现,这些类型具有不同的作用和引用范围,已达到不同的文件配置的要求。

  • identity:指定操作源文件与目标文件具有相同的名称,作为唯一标识。
  • flatten:指定源文件的名称与目标文件的名称相同,但忽略源文件中的文件目录仅包含文件。当需要把多个目录中的文件复制到一个目录时,这个Mapper相当有用。
  • glob:源文件和目标文件的匹配模式中都包含 * 的匹配符。 * 号代表匹配任何一个或多个字符。
  • merge:用于把打包的源文件进行合并。目标文件名称与源文件相同,通过to属性定义具体的目录。多用于压缩和打包。
  • regexp:包含to和from属性,这两个属性通过正则表达式来定义,可用于文件匹配。用正则表达式代替了简单的*匹配符,但该Mapper的结果依赖于底层的正则表达式实现。
  • package:这个Mapper的作用于glob相似,模式中包含 * 的匹配符。package可用于替换目录名称。在 <junit> 任务中经常使用。
  • composite:用于组合多个Mapper类型,每个Mapper类型都对源文件进行操作,最后返回所有操作后的结果。
  • chained:可包含多个Mapper类型,源文件依次经过每个Mapper的操作,上一个Mapper的输出作为下一个Mapper的输入,返回经过最后一个Mapper后的执行结果。
  • filterMapper:这个Mapper用于对文件名进行过滤。

9.2 Mapper的简单实例

<mapper type="identity"/>
<identitymapper>

说明:上面的两个Mapper的作用相同,一个通过type属性指定类型,另一个直接通过Mapper的类型定义。
这里值得着重完善------》》》
注意:其他Mapper的使用与上面的类同。

10. ZipFileSet Type:zip格式的文件集

ZipFileSet类型可以看作是一种特殊的FileSet。ZipFileSet具有两种不同的形式:
1. 当ZipFileSet中的src属性被使用,那么目录src下的文件会以zip文件格式进行组织。(测试的时候src属性一直无法运行,提示src的值不应该是一个文件夹,原来是把一个压缩包中的文件看作是一个文件系统)
2. 当ZipFileSet中的dir属性被使用,那么目录dir下的文件将以文件系统的形式进行组织。
ZipFileSet类型在打包jar文件和war文件时经常使用。
包含的属性:

  • prefix属性:用于定义ZipFileSet中的文件路径的前缀(也就是说zip文件中的文件夹前半部分的目录)
  • fullpath属性:用于定义ZipFileSet中包含的文件的全路径。(用于指定一个文件在zip中的详细路径及其名称)
  • src属性:用于替代当前的目录位置。
  • filmode属性:用以定义文件的权限形式,在UNIX或Linux下使用。

10.1 zip文件集合实例:实现打包zip文件的功能

通过Ant工具内建的zip任务实现打包zip文件的功能,同时可以在zip任务中引用ZipFileSet类型指定的文件,构件代码如下:

<zip destfile="目标文件的路径及名称.zip">
	<zipfileset dir="打包的根目录" prefix="Zip内部的首路径/>
	<zipfileset dir="." includes="aa.txt" fullpath="linshi/wogaimingzile.txt"/>
</zip>

11. FilterChains 和 FilterReaders:过滤链和过滤读取器

FilterChains相当于一组有序的FilterReader,与Java中的FilterChain过滤链的作用相似。按顺序执行FilterReader。Ant使用的FilterReader类继承java.io.FilterReader类,用户可以定义自己的FilterReader类的实现。FilterReader用于过滤Reader中的内容。
FilterReader包括一个属性classname。classname属性用于指定具体的过滤类的名称 (包含包名)
(暂时不理解————》》》》》)

<?xml version="1.0"?>
<project name="porject1" default="target1">
  <target name="target1">
    <!-- 复制文件时进行文件过滤 -->
    <copy file="." tofile="copyFile">
      <!-- 定义过滤链 -->
      <filterchain>
        <filterreader classname="your.extension.of.java.io.FilterReader">
          <param name="foo" value="bar" />
        </filterreader>
        <!-- 自己定义的过滤器 -->
        <filterreader classname="another.extension.of.java.io.FilterReader">
          <!-- 自己定义的过滤器 -->
          <classpath>
            <pathelement path="${classpath}" />
          </classpath>
          <param name="blah" value="blee" />
          <param type="abra" value="cadabra" />
        </filterreader>
      </filterchain>
    </copy>
  </target>
</project>

12. Ant Component 定制和扩展

  • condition功能定制
  • selector功能定制
  • filter功能定制

对于这一部分,暂时不进行记录,感觉暂时不会做到这么高深的地步,先熟练掌握提供的功能再说。
参考资料:
《Ant开发及整合应用详解》

赞赏

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页