Uploaded image for project: 'Maven Resources Plugin'
  1. Maven Resources Plugin
  2. MRESOURCES-77

Filters for copy-resources goal in plugin configuration section are ignored

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.3
    • Fix Version/s: 2.4
    • Component/s: None
    • Labels:
      None

      Description

      I need to have a project where I can create multiple versions of resource files using different filters, I am trying to use the copy-resources goal for this purpose by making it part of the generate-resource phase and specifying the filters and resources under the plugin section of the POM.

      <plugins>
      	<plugin>
      		<artifactId>maven-resources-plugin</artifactId>
      		<executions>
      			<execution>
      				<id>config-a</id>
      				<phase>generate-resources</phase>
      				<goals>
      					<goal>copy-resources</goal>
      				</goals>
      				<configuration>
      					<outputDirectory>
      						${basedir}/target/generated-resources/a
      					</outputDirectory>
      					<filters>
      						<filter>a.properties</filter>
      					</filters>
      					<resources>
      						<resource>
      							<directory>etc/build</directory>
      							<filtering>true</filtering>
      							<includes>
      								<include>jndi.properties</include>
      							</includes>
      						</resource>
      					</resources>
      				</configuration>
      			</execution>
      			<execution>
      				<id>config-b</id>
      				<phase>generate-resources</phase>
      				<goals>
      					<goal>copy-resources</goal>
      				</goals>
      				<configuration>
      					<outputDirectory>
      						${basedir}/target/generated-resources/b
      					</outputDirectory>
      					<filters>
      						<filter>b.properties</filter>
      					</filters>
      					<resources>
      						<resource>
      							<directory>etc/build</directory>
      							<filtering>true</filtering>
      							<includes>
      								<include>jndi.properties</include>
      							</includes>
      						</resource>
      					</resources>
      				</configuration>
      			</execution>
      		</executions>
      	</plugin>
      	<!-- Other plugin entries -->
      </plugins>

      After doing some debugging, the problem seems to be caused by a combination of things:

      • The CopyResourcesMojo doesn't define its own filters field, so it inherits the configuration from the ResourcesMojo. That configuration specifies that it uses ${project.build.filters} by default. This is part of the plugin.xml in the repository as
        <filters implementation="java.util.List">${project.build.filters}</filters>
      • When the merging of the plugin.xml configuration from the repository with the configuration from the POM is done, it includes the filters that were specified in the POM, but also includes the default value and implementation attribute. Hence, when the plugin fields are populated (in DefaultPluginManager.populatePluginFields), it gets the value ${project.build.filters} instead of using the <filter> children from the POM configuration.

      I am not really sure what could be a good solution. Removing the default of ${project.build.filters} for the CopyResourcesMojo would make this scenario work, but it would make the filters required when the plugin is declared in the plugins section.

        Attachments

        1. MRESOURCES-77.patch
          2 kB
          Fabian Bauschulte
        2. MRESOURCES-77.patch
          12 kB
          Peter Janes
        3. filter-test.zip
          1 kB
          Lars Beuster

          Activity

            People

            • Assignee:
              jdcasey John Casey
              Reporter:
              duribe Daniel Uribe
            • Votes:
              5 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: