Apache Maven Reporting Executor

Classes to prepare report plugins execution with Maven 3, through MavenReportExecutor (implementation).

Contrary to Maven 2.x:

  1. report <version> explicit definition is optional:
    if no version is specified for a report plugin, version is determined by
    1. searching for the plugin in the build/plugins section of the pom,
    2. searching for the plugin in the build/pluginManagement section of the pom,
    3. asking PluginVersionResolver to get a fallback version and display a warning as it's not a recommended use,
  2. plugin configuration from build/pluginManagement is injected into reporting/plugins (since Maven Reporting Executor 1.2, which is used by Maven Site Plugin 3.4).

Notice on now obsolete reportPlugin format

Since 1.4 (used by Maven Site Plugin 3.7), the request can (and should) be populated from pom's <reporting.plugins> section, injected in Mojo parameter as ${project.reporting.plugins} default value:

    @Parameter( defaultValue = "${project.reporting.plugins}", readonly = true )
    private org.apache.maven.model.ReportPlugin[] reportingPlugins;

This section is kept to explain what happened in previous releases of the component, but this approach has been abandonned so far after discovering major limitations: see Maven Site Plugin 3.9.0 documentation for more details.

Report plugins can be configured in <configuration> element of maven-site-plugin or any other report building plugin with following XML model corresponding to plugin's List<ReportPlugin> parameter:

<reportPlugins>
  <reportPlugin>
    <groupId/>
    <artifactId/>
    <version/>
    <configuration/>
    <reports/>
    <reportSets>
      <reportSet>
        <id/>
        <configuration/>
        <reports/>
      </reportSet>
    </reportSets>
  </reportPlugin>
</reportPlugins>

Notice this is the model from plugins in <reporting> section of POM:

  • without <inherited> element: reporting plugins configuration inheritance is not supported at this level (see MSITE-484),
  • with additional <reports> list outside <reportSet> that simplifies reports configuration in usual cases.

Maven 3 core makes an automatic transformation of <reporting> POM section (which supports configuration inheritance) to maven-site-plugin's reportPlugins configuration through the ReportingConverter component.

But Maven 3 does not do the same job for any other plugin wanting to use reports, like maven-pdf-plugin for example: this is one of the key limitations that made Maven team drop this approach.