Lookup the component in your Mojo:
/** * @component role="org.apache.maven.shared.filtering.MavenResourcesFiltering" * role-hint="default" * @required */ private MavenResourcesFiltering mavenResourcesFiltering;
Apply filtering on your List of resources, see Introduction for the default FilterWrappers that are used.
MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution ( resources, outputDirectory, mavenProject, encoding, fileFilters, nonFilteredFileExtensions, mavenSession ); mavenResourcesFiltering.filterResources( mavenResourcesExecution );
You must use the other methods from the MavenResourcesFiltering component and construct your own List of FilterWrappers. The following example adds interpolation for the token @ @ using values coming from reflection with the Maven Project.
// Create your FilterWrapper FileUtils.FilterWrapper filterWrapper = new FileUtils.FilterWrapper() { public Reader getReader( Reader reader ) { Interpolator propertiesInterpolator = new RegexBasedInterpolator( "\\@", "(.+?)\\@" ); ValueSource valueSource = new MavenProjectValueSource( mavenProject, true ); propertiesInterpolator.addValueSource( valueSource ); return new InterpolatorFilterReader( reader, propertiesInterpolator, "@", "@" ); } }; // Add the new filterWrapper to your MavenResourcesExecution instance mavenResourcesExecution.addFilterWrapper( filterWrapper );
There is a helper method to simplify this. Here's how you would use it to do what we did above:
mavenResourcesExecution.addFilerWrapper( new MavenProjectValueSource( mavenProject, true ), "\\@", "(.+?)\\@", "@", "@" );
Note: If mavenResourcesExecution.useDefaultFilterWrappers is set to true, the default FilterWrappers will be added first.
Now it's time to filter the resources:
// Apply filtering on your resources mavenResourcesFiltering.filterResources( mavenResourcesExecution );
Note: Maven Filtering uses the plexus-interpolation component.