My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
UsageGuide  
Usage guide (how to use and parameter definitions)
userguide, Featured
Updated Mar 13, 2012 by baker.st...@gmail.com

Usage Guide

Parameters used in any execution

ParameterRequiredDescription
phaseno (default: compile)The desired phase can easily be redefined here. Typically used phases are: compile, test and prepare-package.
goalyesAlways "replace".
outputDirnoDestination directory relative to the baseDir for all replaced files to be written to.
outputBasedirnoDestination directory relative to the execution directory for all replaced files to be written to. Use with outputDir to have files written to a specific base location.
basedirnoPath to base relative files for replacements from. (Default "." which is the default Maven basedir). This feature is useful for multi-module projects.
preserveDirno (default: true)Preserve the directory structure of files found with the includes parameter when writing to the outputDir.
quietno (default: false)Stops printing a summary of files that have had replacements performed upon them when true.
ignoreErrorsno (default: false)Ignore any errors with missing files or any other exceptions caused by this plugin. The Maven build will continue and log an error if ignoreErrors is set to true and an error occurs.

Selecting which files to perform replacements upon

ParameterRequiredDescription
includes:include(see note below)List of files to include for multiple (or single) replacement. In Ant format (*/directory/**.properties)
excludes:excludenoList of files to exclude (must have some includes) for multiple (or single) replacement. In Ant format (**/directory/do-not-replace.properties). The files replaced will be derived from the list of includes and excludes. Files not found are ignored by default.
filesToInclude(see note below)List of comma separated files to include for multiple (or single) replacement. In Ant format (*/directory/**.properties). Files not found are ignored by default.
filesToExcludenoList of comma separated files to exclude (must have some includes) for multiple (or single) replacement. In Ant format (**/directory/do-not-replace.properties). The files replaced will be derived from the list of includes and excludes.
file(see note below)Path to single file to replace tokens in. The file must be text (ascii). Based on current execution path.
encodingno (default: system default, i.e. UTF-8)File encoding used for reading and writing files different from the default system's file encoding.
ignoreMissingFileno (default: false)Set to true to not fail build if the file is not found. First checks if file exists and exits without attempting to replace anything. Only usable with file parameter.
outputFileno (default: file)The input file is read and the final output (after replacing tokens) is written to this file. The path and file are created if it does not exist. If it does exist, the contents are overwritten. You should not use outputFile when using a list of includes.
inputFilePatternnoRegular expression to match upon the name of the file being replaced. Use groups to match the fragments to make use of within outputFilePattern. This parameter will have no effect without outputFilePattern also being used.
outputFilePatternnoExpression for making use of the matched groups from inputFilePattern for creating your output file's name. This parameter will have no effect without inputFilePattern also being used. Ensure you are using the Java standard's group identifies (i.e. $1, $2, etc).

Note: You must either supply a file, or list of includes (excludes are optional).

Parameters for replacing text

ParameterRequiredDescription
token(see note below)The text to replace within the given file. This may or may not be a regular expression (see regex notes above).
tokenValueMap(see note below)A file containing tokens and respective values to replace with. This file may contain multiple entries to support a single file containing different tokens to have replaced. Each token/value pair should be in the format: "token=value" (without quotations). If your token contains ='s you must escape the = character to \=. e.g. tok\=en=value
variableTokenValueMap(see note below)Similar to tokenValueMap but incline configuration inside the pom. Token/Value pairs are separated by a comma (",") instead of new lines. This parameter may contain multiple entries to support a single file containing different tokens to have replaced. Each token/value pair should be in the format: "token1=value1,token2=value2" (without quotations).
commentsEnabledno (default: true)Enables comments within the tokenValueMap (denoted by '#'). If your token starts with an '#', then you must supply the commentsEnabled parameter and with a value of false.
tokenFile(see note below)A file containing the token to be replaced. May be multiple words or lines. This is useful if you do not wish to expose the token within your pom or the token is long.
valueno (default: empty)The text to be written over any found tokens. If no value is given, the tokens found are replaced with an empty string (effectively removing any tokens found). You can also reference grouped regexp matches made in the token here by $1, $2, etc.
valueFilenoA file containing a value to replace the given token with. May be multiple words or lines. This is useful if you do not wish to expose the value within your pom or the value is long.
regexno (default: true)Indicates if the token should be located with regular expressions. This should be set to false if the token contains regex characters which may miss the desired tokens or even replace the wrong tokens.
regexFlags:regexFlagno (list cannot be empty if used)List of standard Java regular expression Pattern flags (see Java Doc). May contain multiple flags. May only be of the following: CANON_EQ, CASE_INSENSITIVE, COMMENTS, DOTALL, LITERAL, MULTILINE, UNICODE_CASE, UNIX_LINES.
replacements:replacementno (list of token/value pairs to replace within the given file)Each replacement element to contain sub-elements as token/value pairs. Each token within the given file will be replaced by it's respective value.
unescapeno (does not unescape by default)Unescapes tokens and values which contain escaped special characters. e.g. token\n123 would match tokens: token(new line)123.
delimiters:delimiternoAdd a list of delimiters which are added on either side of tokens to match against. e.g. @ would match @token@. You may also use the '' character to place the token in the desired location for matching. e.g. ${} would match ${token}.
xpathnoUse X-Path to locate a document node to perform replacements upon. This parameter takes an X-Path expression. Since 1.4.0 -  Issue 58 .

Note: Either a token, tokenFile or tokenValueMap is required. An execution should not contain more than one of these.


Examples

Complete examples can be found in the plugin's test utility. http://code.google.com/p/maven-replacer-plugin/source/browse/test-plugin-use/pom.xml

Single regex file replacement with output file:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>(version)</version>
            <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>                    
                </execution>
            </executions>
            <configuration>
                <ignoreMissingFile>true</ignoreMissingFile>
                <file>target/someapp/jsp/helloWorld.jsp</file>
                <outputFile>
                    target/someapp/jsp/helloWorld-updated.jsp
                </outputFile>
                <regex>false</regex>
                <token>$BUILD_NUMBER$</token>
                <value>${buildNumber}</value>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Using regular expression flags:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>(version)</version>
            <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <file>target/someapp/jsp/helloWorld.jsp</file>
                <token>ToKeN</token>
                <value>value</value>
                <regexFlags>
                    <regexFlag>CASE_INSENSITIVE</regexFlag>
                    <regexFlag>MULTILINE</regexFlag>
                </regexFlags>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Multiple file replacement:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>(version)</version>
            <executions>                
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <includes>
                    <include>target/**/replace-me.*</include>
                </includes>
                <excludes>
                    <exclude>target/**/do-not-replace-me.*</exclude>
                </excludes>
                <token>TOKEN</token>
                <value>VALUE</value>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Single file replacement using a tokenValueMap:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>(version)</version>
            <executions>                
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>                    
                </execution>
            </executions>
            <configuration>
                <file>target/classes/database.properties</file>
                <tokenValueMap>etc/${environment}/database.conf</tokenValueMap>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Multiple token/value replacements per file:

<build>
    <plugins>
        ...
        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>maven-replacer-plugin</artifactId>
            <version>(version)</version>
            <executions>                
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <file>target/classes/database.properties</file>
                <replacements>
                    <replacement>
                        <token>token1</token>
                        <value>value1</value>
                    </replacement>
                    <replacement>
                        <token>token2</token>
                        <value>value2</value>
                    </replacement>
                </replacements>                        
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Notes on some difficulties integrating maven-replacer-plugin into your build:

The phase and time of execution depends largely on the desired use and the type of packaging. There can be issues with WAR packaging and replacing content at the right time to be included up by the WAR (See Usage with other plugins).

Comment by Martin.Jozef@gmail.com, Jul 2, 2010

How would you configure the plugin for multiple token/values per file. Where we have multiple files?

Comment by kai.goer...@gmail.com, Jul 16, 2010

Hi Martin,

do have a solution to use multiple files?

Comment by project member baker.st...@gmail.com, Aug 21, 2010

Hi Martin and Kai,

There are two ways to select multiple files for replacement. Either use, filesToInclude or includes:include.

Then combine this with either as many replacements:replacment elements as you need (see last example) or use a tokenValueMap in your configuration.

Comment by bmat...@gmail.com, Sep 23, 2010

hi,

Trying to understand the role of this plugin. What does it add to standard maven filtering? http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

I feel this plugin has some interesting things (like regexp filtering) but that it should better have been contributed to maven-resources-plugin than creating a new one, since it confuses the filtering process for users. What do you think?

Cheers

Comment by project member baker.st...@gmail.com, Sep 23, 2010

The maven-replacer-plugin is suited to niche (or more advanced) replacement logic which is not offered in resources plugin. Adding some of the features in this plugin to resources plugin would only confuse the use resources.

Comment by Gaurav.C...@gmail.com, Oct 27, 2010

Looks like a great plugin - wondering if/how it would work for our purposes (sorry, I'm not very experienced with Maven). At build time, we'd like to have a configurable list of common CSS/JS files concatenated into one CSS/JS file (i.e. common.css/js). All HTML references to files contained within the common file would need to be removed and one of them replaced with a link to the new common file.

We'd then like to be able to search the rest of the HTML page for any non-common CSS/JS files and concat all of those into another CSS/JS file. Again, this would require replacing existing links to a link to only one file. Does Maven, along with this maven-replacer-plugin, support searching/concatenating files based on search results/replacing file references in HTML? If not, any ideas for build-time tools that may help? Our goal is to reduce the number and size of files that need to be fetched when the app is deployed to vastly improve performance.

Thanks very much, Gaurav, Sakai Project

Comment by project member baker.st...@gmail.com, Oct 27, 2010

Hi Gaurav,

The maven-replacer-plugin does not concatenate files.

If you are wanting to combine css/js files, I would suggest the yuicompressor plugin's aggregation use: http://alchim.sourceforge.net/yuicompressor-maven-plugin/ex_aggregation.html

As for replacing all adhoc css/scripts in various files, it might be better practice to alter the files before building them so that they reference your compressed files created by yuicompressor.

If there are a lot of these files, you might want to write an ant script which finds all script and style tags and write their contents to some file which is then used by the yuicompressor. Again, I would suggest only doing this as a one time modification to the source, rather than as some magic that takes place during the build.

I hope this helps, Steven

Comment by maff...@gmail.com, Oct 29, 2010

Hi

I've been trying without success to set up a configuration whereby I can process multiple input files (all with the same replacement) and save the processed files into some target directory. Is this supported at all? I'm thinking of something like:

<configuration>

<includes>
<include>src/main/sql/.sql</include>
</includes>

<outputDir>target/sql/processed/</outputDir> <regex>true</regex>

<replacements>
<replacement>
<token>aaa</token> <value>bbb</value>
</replacement>
</replacements>
</configuration>

Comment by project member baker.st...@gmail.com, Oct 29, 2010

Hi Maffeis,

I assume that the include should have contained an asterix before .sql? Currently there is no support for a target directory (outputDir).

This does sound like a good idea, so I will submit an Enhancement Issue for this feature. In the meantime, you can feel free to grab a copy of the source and make the modification yourself.

Thanks, Steven

Comment by project member baker.st...@gmail.com, Oct 30, 2010

Hi Maffeis,

Your enhancement has been completed and is available in version 1.3.3. Please try it out :-)

Thanks, Steven

Comment by hjoh...@gmail.com, Dec 3, 2010

Nice plugin. Now I finally have an alternative to using antrun plugin and replacing whole files.

To bmathus's comment. It is not always desireable to have maven variables in your files. I have a project that uses eclipse for development and maven for production builds. Eclipse wouldn't know what to do with maven variables inside of files.

Comment by csfreeb...@gmail.com, Jan 20, 2011

Just need to execute the following commands: mvn com.google.code.maven-replacer-plugin:maven-replacer-plugin:replace

:)

Comment by meno...@gmail.com, Feb 4, 2011

It seems not possible in a multimodule project to read or write file in the parent project. I have the following structure :

parent
 .pom.xml
 +target
 *child-web
   .pom.xml

In the child-web pom.xml, im trying to create the result file in ../target. I have tried the ../ path in the outputFile and outputBasedir without success. The plugin try to write in the child project in ${baseDir}\..\myfile.txt which dont exist. It seems impossible to have access in read/write of files in the parent project

Any suggestion ?

Comment by project member baker.st...@gmail.com, Feb 4, 2011

Try adding: <basedir>../${basedir}</basedir> to your configuration.

Comment by zyka....@gmail.com, Feb 9, 2011

I am using this plugin, works fine BUT :) I just wonder why all the examples use hardcoded "target" directory instead of ${project.build.directory}. Well, I tried. And it appears that ${project.build.directory} is somehow not resolved when used in an include. Once changed back to "target" it works again. Any ideas? Thanks

Comment by project member baker.st...@gmail.com, Feb 9, 2011

zyka.jan - I suspect the basedir is having an impact. Try setting <basedir>/</basedir> into your configuration.

Comment by zyka....@gmail.com, Feb 9, 2011

That was my first idea. Didn't help. Second was <basedir />. Didn't help either. The solution actually was to set the ${project.build.directory} as basedir: <basedir>${project.build.directory}</basedir>. I think this is generally better than hardcode 'target' everywhere and might be considered to get into the examples :) Of course only where appropriate. There are probably situations when the default <basedir>.</basedir> is just fine.

Comment by manfred....@gmail.com, Feb 12, 2011

I ran into the same problem and set it to target, which works fine. I used ${project.build.directory) also, but after some debuggin I noticed that the plugin also adds ${basedir}, so you'll get a wrong path to where your files are and no replacements are done. But setting basedir to project.build.directory indeed seems like a better option. I'll try that.

Comment by schmo...@gmail.com, Mar 8, 2011

I'm trying to replace default config values in a web.xml file and cannot find a way to replace a multiline token (which contains tokens).

I'd like to replace:

<context-param>

<param-name>requiressl</param-name> <param-value>true</param-value>
</context-param>

With:

<context-param>

<param-name>requiressl</param-name> <param-value>false</param-value>
</context-param>

I cannot just tokenize the param-value because of our current build and was hoping to be able to replace the entire <context-param> block.

Comment by project member baker.st...@gmail.com, Mar 8, 2011

Try the following configuration:

<token>&lt;param-name&gt;requiressl&lt;/param-name&gt;.*${line.separator}&lt;param-value&gt;true&lt;/param-value&gt;</token>
<value>&lt;param-name&gt;requiressl&lt;/param-name&gt;${line.separator}&lt;param-value&gt;false&lt;/param-value&gt;</value>
Comment by rustam...@gmail.com, Mar 18, 2011

Can this one be published in the Maven repo please? I don't want to explain to my clients how to install it manually.

Comment by project member baker.st...@gmail.com, Mar 18, 2011

Rustam, Are you referring to this plugin being in maven central repo? If so, it already is.

Comment by porot...@gmail.com, Mar 31, 2011

I have a problem with the phases and the plugin: a) Using prepare-package I get an "file doesnt exist" error (because the target folder doesnt exist when it tries to replace it). b) Using package phase, the plugin replaces the file but only in the target folder (and not in the war)

How can I solve this problem?

<plugin>

<groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>maven-replacer-plugin</artifactId> <version>1.3.7</version> <executions>
<execution>
<phase>prepare-package</phase> <goals>
<goal>replace</goal>
</goals>
</execution>
</executions> <configuration>
<!--<file>WebContent??/WEB-INF/xstreamline-site.xml</file>--> <file>target/${project.artifactId}-${project.version}/WEB-INF/xstreamline-site.xml</file> <replacements>
<replacement>
<token>ear.version</token> <value>${ear.version}-${maven.build.timestamp}</value>
</replacement>
</replacements>
</configuration>
</plugin>
Comment by project member baker.st...@gmail.com, Apr 1, 2011

Check out the UsageWithOtherPlugins page.

Comment by atdi...@gmail.com, Apr 26, 2011

It would be great if you could support "back references" when doing regex replacements.

Comment by project member baker.st...@gmail.com, May 11, 2011

Pop a enhancement issue in if you really want it :-).

Comment by gael.not...@gmail.com, Aug 13, 2011

Hello great tool, is it possible to replace HTML with it I would like to replace

	<script type="text/javascript" charset="utf-8" src="Scripts/script1.js"></script>
	<script type="text/javascript" charset="utf-8" src="Scripts/script2.js"></script>

with something like: <script type="text/javascript" charset="utf-8" src="Scripts/both-min.js"></script>

How can you escape special characters in the pom ?

Comment by gael.not...@gmail.com, Aug 13, 2011

Found a solution to my problem with regexp. I modified original html to:

<!--BeginToBeReplacedByReplacer1?-->
<script type="text/javascript" charset="utf-8" src="Scripts/script1.js"></script>
<script type="text/javascript" charset="utf-8" src="Scripts/script2.js"></script>
<!--EndToBeReplacedByReplacer1?-->

and inserted following configuration in the pom:

<regex>true</regex>
<regexFlags><regexFlag>DOTALL</regexFlag></regexFlags>
<token><!CDATA[<!--BeginToBeReplacedByReplacer1.*EndToBeReplacedByReplacer1-->]]></token>
<value><!type="text/javascript" charset="utf-8" src="Scripts/both-min.js"></script>]]></value>

Hope it helps

Comment by skompe...@gmail.com, Sep 21, 2011

Hi

<token>file:/${basedir}/src/main/resources</token> ${basedir} is changed to file:/D:\Project\test\....

Because of backslashesh like \P ,etc , i am getting error. java.util.regex.PatternSyntaxException?: Unknown character property name {r} near index 10 file:/D:\Project\

^
at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.charPropertyNodeFor(Pattern.java:2437) at java.util.regex.Pattern.family(Pattern.java:2412) at java.util.regex.Pattern.sequence(Pattern.java:1831) at java.util.regex.Pattern.expr(Pattern.java:1752) at java.util.regex.Pattern.compile(Pattern.java:1460) at java.util.regex.Pattern.<init>(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at com.google.code.maven_replacer_plugin.TokenReplacer?.replaceRegex(TokenReplacer?.java:11) at com.google.code.maven_replacer_plugin.Replacer.replaceContent(Replacer.java:41)

I want replace backslash to forward shlashes( \ to /) or ignore escape characters.

I tried using <unescape>true</unescape> ,but not successful. Please add your valuable inputs to resolve this.

Comment by project member baker.st...@gmail.com, Sep 21, 2011

Try: <regex>false</regex>

Comment by sabharwa...@gmail.com, Sep 27, 2011

Hi,

How do I replace <entry key="buildCount">6</entry> with <entry key="buildCount">$build.number}</entry>

Comment by project member baker.st...@gmail.com, Sep 27, 2011

Hi Sabharwa,

The cleanest way would be to change the 6 to something like: @BUILD_COUNT@ in your source and use: <token>@BUILD_COUNT@</token> and <value>${build.number}<value>. This will keep the surrounding entry element and only change the token.

Comment by grkunt...@gmail.com, Nov 4, 2011

It would be great if you could provide pseudo-variables for the file name and line number in the replacement text.

Comment by project member baker.st...@gmail.com, Nov 6, 2011

Hi grkuntzmd, Would you liken this to  Issue28 ?

Comment by matusmar...@gmail.com, Nov 23, 2011

Hi, I have a question: is it possible to reuse regexp groups in here?

Example: I want to replace image names by its html objects ie. IMG=someName.jpg -> <img src="someName.jpg"/> it means, I would use regex group:

<token>IMG=(.+)\.jpg</token> <value>&lt;img src=\"(0).jpg\"&gt;</value>

This do not work for me :(

Marcel

Comment by project member baker.st...@gmail.com, Nov 23, 2011

Try the value: <value>&lt;img src=\"$1.jpg\"&gt;</value>

Comment by matusmar...@gmail.com, Nov 23, 2011

That's it! Thank you really much ;)

Comment by nikolay....@gmail.com, Jan 13, 2012

I use java servlets and it would be interesting concatenate all strings, that are separated by "+" in one. It allow to write nice formatted html code inside method parameter.

Comment by project member baker.st...@gmail.com, Jan 15, 2012

Hi nikolay, I dont quite understand what you're trying to do. Do you mean you have some text in a java class which has +'s in it you wish to remove at build time?

Comment by dynaw...@gmail.com, Feb 28, 2012

Hi, how can I use BACK-REFERENCES?

Comment by dynaw...@gmail.com, Feb 28, 2012

I got it - $1, not \1.

Comment by project member baker.st...@gmail.com, Feb 28, 2012

Yes, that's right. This plugin uses Java's backreference syntax.

Comment by geana.ad...@gmail.com, May 12, 2012

Hi, I'm having some issues when trying to use the regex functionality. Whenever I have <regex>true</regex> I get an weird error : "No group 7". Has anyone else stumbled into this ?

Thanks!

Comment by project member baker.st...@gmail.com, May 13, 2012

Hi geana.adrian, That means your pattern (or token) does not match a 7th group. Can you tell me what your token and value are? You might have more regex references than groups in your token.

Comment by geana.ad...@gmail.com, May 13, 2012

Hi, thanks for the quick response! I'm not sure what you mean by 'groups'. I'm trying something similar to what a user commented earlier on this page. I managed to implement my behavior without using regex (using tokenFile and valueFile) but it would be much easier if I manage to get arround this error.

Here's the configuration I'm trying :

<configuration>
	<file>target/target_name/print.html</file>
	<regex>true</regex>
	<regexFlags><regexFlag>DOTALL</regexFlag></regexFlags>
	<replacements>
		<replacement>
			<token><![CDATA[<!--BeginToBeReplacedByReplacer1Print.*EndToBeReplacedByReplacer1Print-->]]></token>
			<value><![CDATA[<script type="text/javascript" charset="utf-8" src="js/minified.min.js"></script>]]></value>
		</replacement>

		<!-- MORE HERE -->
		
	</replacements>

</configuration>

Thanks !

Comment by project member baker.st...@gmail.com, May 14, 2012

Looks like your token has regex characters ("[" and "]"). Either escape them or replace them with dots (".").

Comment by mettleur...@gmail.com, May 23 (4 days ago)

I am trying to change the <version> element in multiple pom.xml files in my project. I want to append "-SNAPSHOT" to the existing version.

I want to use xpath since I only want to change the <version> for the pom itself, not any of the <dependency> versions or any <parent> versions.

I have tried the following, but I get XML errors about content before the prolog. For the <xpath> I have tried /project/version, /project/version/text(). Any help is appreciated.

<configuration>

<includes>
<include>/pom.xml</include>
</includes> <replacements>
<replacement>
<xpath>/project/version</xpath> <token>(.?)</token> <value>$1-SNAPSHOT</value>
</replacement>
</replacements> <regex>true</regex> <regexFlags>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
</configuration>


Sign in to add a comment
Powered by Google Project Hosting