Use regular expressions to transform file names
A particularly powerfule file mapper deserves more detailed description: It's the regular expression file mapper.
This file mapper uses regular expressions to identify certain pieces in the input file name. This piece, or these pieces are replaced with a replacement pattern.
Let's first design a configuration snippet, which would transform all files in the directory src/main/xml
by applying the stylesheet src/main/stylesheet.xsl
. The created files would have the extension .fo
, rather than .xml
. (We could very well achieve the same by using the FileExtensionMapper
, as demonstrated in this example.)
<build> <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>xml-maven-plugin</artifactId> <executions> <execution> <goals> <goal>transform</goal> </goals> </execution> </executions> <configuration> <transformationSets> <transformationSet> <dir>src/main/xml</dir> <stylesheet>src/main/stylesheet.xsl</stylesheet> <fileMappers> <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.RegExpFileMapper"> <pattern>\.gif$</pattern> <replacement>.jpg</replacement> </fileMapper> </fileMappers> </transformationSet> </transformationSets> </configuration> </plugin> ... </plugins> </build>
Let's have a look at some other examples. We omit most of the details, except for the pattern and the replacement, which are the important parts:
<fileMapper implementation="org.codehaus.plexus.components.io.filemappers.RegExpFileMapper"> <pattern>^(.*)\.gif$</pattern> <replacement>$1.jpg</replacement> </fileMapper>
This example is identical with the previous. However, it demonstrates the use of capture groups. The contents of (.*)
are captured and inserted by using the group term $1
. You might have multiple groups and use the terms $2
, $3
, and so on.
<fileMapper implementation="org.codehaus.plexus.components.io.filemappers.RegExpFileMapper"> <pattern>a</pattern> <replacement>b</replacement> </fileMapper>
This example replaces the first a with a b. Nothing special here, except that you might like to replace all a's instead. Here's how to do it:
<fileMapper implementation="org.codehaus.plexus.components.io.filemappers.RegExpFileMapper"> <pattern>a</pattern> <replacement>b</replacement> <replaceAll>true</replaceAll> </fileMapper>