一、概述
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>

793

被折叠的 条评论
为什么被折叠?



