From e888cc1fc8d1adfafcd9c29866691d095abed7bf Mon Sep 17 00:00:00 2001
From: Stefan Bodewig Version 1.3 - 2000/11/30 Version 1.3 - 2000/12/01
Table of Contents
@@ -864,6 +864,318 @@ name.
Groups all files in directory ${client.src} using the
same patterns as the example before.
Some tasks take source files and create target files. Depending on
+the task it may be quite obvious which name a target file will have
+(using javac, you know there will be
+.class files for your .java files) - in
+other cases you may want to specify the target files either to help
+Ant or to get an extra bit of functionality.
While source files are usually specified as filesets, you don't specify target files directly,
+but tell Ant how to find the target file(s) for one source file. An
+instance of org.apache.tools.ant.util.FileNameMapper is
+responsible for this. It constructs target file names based on rules
+that can be parameterized with from and to
+attributes - the exact meaning of which is implementation
+dependent.
These instances are defined in <mapper> elements
+with the following attributes:
| Attribute | +Description | +Required | +
| type | +Specify one of the built in implementations | +Exactly one of both | +
| classname | +Specify the implementation by class name | +|
| classpath | +the classpath to use when looking up
+ classname. |
+ No | +
| classpathref | +the classpath to use, given as reference to a PATH defined elsewhere. | +No | +
| from | +The "from" attribute for the given + implementation | +Depends on implementation. | +
| to | +The "to" attribute for the given + implementation | +Depends on implementation. | +
The classpath can as well be specified via a nested
+<classpath>, that is a PATH
+like structure.
The built in mapper types are:
+The target file name is identical to the source file name. Both
+to and from will be ignored.
++<mapper type="identity" /> +
| Source file name | +Target file name | +
A.java |
+ A.java |
+
foo/bar/B.java |
+ foo/bar/B.java |
+
C.properties |
+ C.properties |
+
Classes/dir/dir2/A.properties |
+ Classes/dir/dir2/A.properties |
+
The target file name is identical to the source file name with all
+leading directory information stripped of. Both to and
+from will be ignored.
++<mapper type="flatten" /> +
| Source file name | +Target file name | +
A.java |
+ A.java |
+
foo/bar/B.java |
+ B.java |
+
C.properties |
+ C.properties |
+
Classes/dir/dir2/A.properties |
+ A.properties |
+
The target file name will always be the same - as defined by
+to, from will be ignored.
++<mapper type="merge" to="archive.tar" /> +
| Source file name | +Target file name | +
A.java |
+ archive.tar |
+
foo/bar/B.java |
+ archive.tar |
+
C.properties |
+ archive.tar |
+
Classes/dir/dir2/A.properties |
+ archive.tar |
+
Both to and from define patterns that may
+contain at most one *. For each source file that matches
+the from pattern a target file name will be constructed
+from the to pattern by substituting the * in
+the to pattern by the text that matches the
+* in the from pattern. Source file names
+that don't match the from pattern will be ignored.
++<mapper type="glob" from="*.java" to="*.java.bak" /> +
| Source file name | +Target file name | +
A.java |
+ A.java.bak |
+
foo/bar/B.java |
+ foo/bar/B.java.bak |
+
C.properties |
+ ignored | +
Classes/dir/dir2/A.properties |
+ ignored | +
++<mapper type="glob" from="C*ies" to="Q*y" /> +
| Source file name | +Target file name | +
A.java |
+ ignored | +
foo/bar/B.java |
+ ignored | +
C.properties |
+ Q.property |
+
Classes/dir/dir2/A.properties |
+ Qlasses/dir/dir2/A.property |
+
Both to and from define regular
+expressions. If the source file name matches the from
+pattern, the target file name will constructed from the
+to pattern using \0 to \9 as back references for the full
+match (\0) or the matches of the subexpressions in parens. Source
+files not matching the from pattern will be ignored.
Note that you need to escape a $-sign with another $-sign in +Ant.
+The regexp mapper needs a supporting library and an implementation
+of org.apache.tools.ant.util.regexp.RegexpMatcher that
+hides the specifics of the library. Ant comes with implementations for
+jakarta-regexp and jakarta-ORO - if you compile
+from sources and plan to use one of them, make sure the libraries are
+in your CLASSPATH. For information about using gnu.regexp or gnu.rex with Ant, see this
+article.
Ant will choose the regular expression library based on the
+following algorithm: if the system property
+ant.regexp.matcherimpl has been set, it is taken as the
+name of the class implementing
+org.apache.tools.ant.util.regexp.RegexpMatcher that
+should be used. If it has not been set, first try jakarta-ORO, if that
+cannot be found, try jakarta-regexp.
++<mapper type="regexp" from="^(.*)\.java$$" to="\1.java.bak" /> +
| Source file name | +Target file name | +
A.java |
+ A.java.bak |
+
foo/bar/B.java |
+ foo/bar/B.java.bak |
+
C.properties |
+ ignored | +
Classes/dir/dir2/A.properties |
+ ignored | +
++<mapper type="regexp" from="^(.*)/([^/]+)/([^/]*)$$" to="\1/\2/\2-\3" /> +
| Source file name | +Target file name | +
A.java |
+ ignored | +
foo/bar/B.java |
+ foo/bar/bar-B.java |
+
C.properties |
+ ignored | +
Classes/dir/dir2/A.properties |
+ Classes/dir/dir2/dir2-A.properties |
+
++<mapper type="regexp" from="^(.*)\.(.*)$$" to="\2.\1" /> +
| Source file name | +Target file name | +
A.java |
+ java.A |
+
foo/bar/B.java |
+ java.foo/bar/B |
+
C.properties |
+ properties.C |
+
Classes/dir/dir2/A.properties |
+ properties.Classes/dir/dir2/A |
+