一、概述
有一些task在获取源文件、创建目标文件时,根据task的不同,目标文件的名称是很明显的。比如javac,可以明确的知道目标文件是.class文件。源文件通常被指定为fileset,并且没有指定目标文件,但是会告诉Ant如何找到源文件的目标文件。org.apache.tools.ant.util.FileNameMapper实例就是用来做这件事的,它基于from和to属性的参数化规则构建目标文件名字,具体的规则依赖于具体的实现。可以支持除了from和to以外的其他属性。Ant中包含一些内置的实现。
二、属性
type:指定一个内置实现。
classname:通过类名指定具体的实现。
classpath:查找classname时使用的类路径。
classpathref:查找classname时使用的类路径的引用。
from:实现的form属性。
to:实现的to属性。
ant不会将to和from属性中的“/”或“\”自动转换为当前平台正确的目录分隔符。如果需要使用分隔符,可以用${file.separator}代替。对于regexpmapper,${file.separator}不起作用,在Windows上的“\”是正则表达式的转义字符。因此对于regexpmapper可以使用handledirsep属性。
三、简单示例
<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>