This topic tells you about the Application Accelerator RewritePath
transform in Tanzu Application Platform (commonly known as TAP).
The RewritePath
transform allows you to change the name and path of files without affecting their content.
type: RewritePath
regex: <string>
rewriteTo: <SpEL expression>
matchOrFail: <boolean>
For each input file, RewritePath
attempts to match its path
by using the regular expression (regex) defined by the regex
property. If the regex matches, RewritePath
changes the path
of the file to the evaluation result of rewriteTo
.
rewriteTo
is an expression that has access to the overall engine model and to variables defined by capturing groups of the regular expression. Both named capturing groups (?<example>[a-z]*)
and regular index-based capturing groups are supported. g0
contains the whole match, g1
contains the first capturing group, and so on.
If the regex doesn’t match, the behavior depends on the matchOrFail
property:
false
, which is the default, the file is left untouched.true
, an error occurs. This prevents misconfiguration if you expect all files coming in to match the regex. For more information about typical interactions between RewritePath
and Chain + Include
, see the following section, Interaction with Chain and Include.The default value for regex
is the following regular expression, which provides convenient access to some named capturing groups:
^(?<folder>.*/)?(?<filename>([^/]+?|)(?=(?<ext>\.[^/.]*)?)$)
Using some/deep/nested/file.xml
as an example, the preceding regular expression captures:
some/deep/nested/
.file.xml
..xml
.The default value for rewriteTo
is the expression #folder + #filename
, which doesn’t rewrite paths.
See the following examples using the RewritePath
transform.
The following moves all files from src/main/java
to sub-module/src/main/java
:
type: RewritePath
regex: src/main/java/(.*)
rewriteTo: "'sub-module/src/main/java' + #g1" # 'sub-module/' + #g0 works too
The following flattens all files found inside the sub-path
directory and its subdirectories, and puts them into the flattened
folder:
type: RewritePath
regex: sub-path/(.*/)*(?<filename>[^/]+)
rewriteTo: "'flattened' + #filename" # 'flattened' + #g2 would work too
The following turns all paths into lowercase:
type: RewritePath
rewriteTo: "#g0.toLowerCase()"
It’s common to define pipelines that perform a Chain
of transformations on a subset of files, typically selected by Include/Exclude
:
- include: ["**/*.java"]
- chain:
- # do something here
- # and then here
If one of the transformations in the chain is a RewritePath
operation, chances are you want the rewrite to apply to all files matched by the Include
. For those typical configurations, you can set the matchOrFail
guard to true
to ensure the regex
you provide indeed matches all files coming in.