Ant内置mapper

一、概述

        mapper是Ant类型之一,Ant包含一些内置mapper。

二、内置mapper

        从Ant1.7.0开始,每一个内置的mapper实现类型都可以通过标签名字直接访问,内置mapper是区分大小写的。

  •         identity:目标文件名与源文件名相同,忽略from和to属性。
  •         flatten:目标文件名与源文件名相同,但是去掉了目录信息,忽略from和to属性。
  •         merge:目标文件名始终为to属性定义的文件名,忽略from属性。
  •         glob:from和to属性都需要并且定义的模式最多包含一个“*”。对于每一个匹配from模式的文件,目标文件名通过将to模式中的“*”替换为匹配from模式中“*”的文本的方式进行构建。与from模式不匹配的文件将被忽略。从Ant1.6.3起,globmapper还支持两个额外的属性:
                    casesensitive:进行匹配时是否区分大小写,默认为true。
                    handledirsep:是否忽略目录分隔符“\”和“/”的不同,默认为false。对于跨平台的构建文件这个属性很有用。
  •         regexp:from和to属性都需要并且定义正则表达式。如果源文件名全部或部分匹配from模式,目标文件名通过to模式中使用\0到\9作为全匹配(\0)和括号内子表达式匹配的反向引用来构建目标文件名。比如要替换文件名的后缀,不能用from="\.class$" to=".java",而是应该用from="(.*)\.class$$" to="\1.java"。与from模式不匹配的文件将被忽略。正则表达式中使用“$”时要注意通过“$$”进行转义。regexp需要库支持,org.apache.tools.ant.util.regexp.RegexpMatcher实例会隐藏库的细节。因为Ant1.8需要运行在Java1.4上,所以基于java.util.regex包的实现总是可用的。如果设置了系统属性ant.regexp.matcherimpl,其值作为实现类的类名,如果没有设置则使用JDK1.4的类。从Ant1.6.3起,regexpmapper还支持两个额外的属性:
                    casesensitive:进行匹配时是否区分大小写,默认为true。
                    handledirsep:如果设置为true,会将文件名中的“\”作为“/”进行匹配。默认为false。
  •         package:与glob语法相同,但是packagemapper会将匹配的源模式中的目录分隔符替换为“.”。这个映射器与uptodate与junit相结合的时候很有用。from和to属性都是必需的。
  •         unpackage:Ant1.6引入,与glob语法相同,unpackage是package的反转。它用目录分隔符替换“.”,对于匹配XML格式化程序的结果与它们的JUnit测试用例很有用。from和to属性都是必需的。
  •         composite:Ant1.7引入,composite可以嵌套多个mapper。通过将源文件名传递给每个嵌套的mapper来执行文件映射,然后返回所有结果。忽略from和to属性。Ant1.8起,映射结果与嵌套的mapper顺序相同。没有与composite对应的mapper类型。
  •         chained:Ant1.7引入,chained可以包含多个mapper。通过将源文件名传递给第一个嵌套的mapper,然后将结果传递给第二个嵌套的mapper,以此类推,来执行文件映射。忽略from和to属性。没有与chained对应的mapper类型。
  •         filtermapper:Ant1.6.3引入,filtermapper将一个过滤器链应用到源文件名称。没有与filtermapper对应的mapper类型。
  •         scriptmapper:Ant1.7引入,scriptmapper执行用支持Apache BSF或者JSR 223的语言编写的脚本。可以内嵌classpath元素。没有与scriptmapper对应的mapper类型。支持以下属性:
                    language:脚本语言。
                    manager:使用的脚本引擎管理器。默认为“auto”。
                    src:包含脚本的文件。
                    setbeans:Ant1.8引入,是否将所有属性、引用和目标作为脚本中的全局变量。默认为true。
                    classpath:脚本所在类路径。
                    classpathref:使用的类路径的引用。
            相关bean及其方法:
                    source:要进行映射的文件或路径。
                    self:scriptmapper本身。
                    self.addMappedName(String name):添加一个新的映射。
                    self.clear():重置文件列表。
  •         firstmatchmapper:Ant1.8引入,firstmatchmapper支持任意数量的mapper,返回第一个匹配的mapper的结果。没有与firstmatchmapper对应的mapper类型。
  •         cutdirsmapper:Ant1.8.2引入,从源文件名中去掉配置数量的目录。没有与cutdirsmapper对应的mapper类型。有一个dirs属性用于指定删除的目录数量。

三、简单示例

<project>
	<mapper type="identity"/>
	<identitymapper/>
	
	<mapper type="flatten"/>
	<flattenmapper/>
	
	<mapper type="merge" to="merged.tar"/>
	<mergemapper to="merged.tar"/>
	
	<mapper type="glob" from="*.xml" to="*.xml.bak"/>
	<globmapper from="*.xml" to="*.xml.bak"/>
	
	<mapper type="regexp" from="^(.*)\.java$$" to="\1.java.bak"/>
	<regexpmapper from="^(.*)\.java$$" to="\1.java.bak"/>
	
	<mapper type="package" from="*Trans.java" to="TEST-*Trans.xml"/>
	<packagemapper from="*Trans.java" to="TEST-*Trans.xml"/>
	
	<mapper type="unpackage" from="TEST-*Trans.xml" to="*Trans.java"/>
	<unpackagemapper from="TEST-*Trans.xml" to="*Trans.java"/>
	
	<compositemapper>
		<identitymapper/>
		<packagemapper from="*.java" to="*.class"/>
	</compositemapper>
	
	<chainedmapper>
		<globmapper from="*.java" to="*.class"/>
		<regexpmapper from="^(.*)\.class$$" to="\1.class.bak"/>
	</chainedmapper>
	
	<filtermapper>
		<replacestring from="\" to="/"/>
	</filtermapper>
	
	<scriptmapper language="javascript">
		self.addMappedName(source.toUpperCase());
		self.addMappedName(source.toLowerCase());
	</scriptmapper>
	
	<firstmatchmapper>
		<globmapper from="*.txt" to="*.txt.bak"/>
		<globmapper from="*.xml" to="*Test.xml"/>
	</firstmatchmapper>
	
	<cutdirsmapper dirs="1"/>
</project>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值