Require Plugin Versions

This rule enforces that all plugins have a version defined, either in the plugin or pluginManagement section of the pom or a parent pom.

The following parameters are supported by this rule:

  • message - an optional message to the user if the rule fails.
  • banLatest - disallow any use of "LATEST" as a version for any plugin. Default = true.
  • banRelease - disallow any use of "RELEASE" as a version for any plugin. Default = true.
  • banSnapshots - disallow any use of SNAPSHOT plugins. Default = true.
  • banTimestamps - disallow any use of snapshot plugins with timestamp version (only enabled when banSnapshots is true). Default = true.
  • phases - The comma separated list of phases that should be used to find lifecycle plugin bindings. The default value is "clean,deploy,site".
  • additionalPlugins - A list of additional plugins to enforce have versions. These are plugins that may not be in the poms but are used anyway, like help, eclipse etc. The plugins should be specified in the form: group:artifactId.
  • unCheckedPluginList - A comma separated list of plugins to skip version checking. Ie allow no version, or snapshots, etc. The plugins should be specified in the form: group:artifactId.

Sample Plugin Configuration (showing some defaults, defaults can be skipped):

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.4.1</version>
        <executions>
          <execution>
            <id>enforce-plugin-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requirePluginVersions>
                   <message>Best Practice is to always define plugin versions!</message>
                   <banLatest>true</banLatest>
                   <banRelease>true</banRelease>
                   <banSnapshots>true</banSnapshots>
                   <phases>clean,deploy,site</phases>
                   <additionalPlugins>
                     <additionalPlugin>org.apache.maven.plugins:maven-eclipse-plugin</additionalPlugin>
                     <additionalPlugin>org.apache.maven.plugins:maven-reactor-plugin</additionalPlugin>
                   </additionalPlugins>
                   <unCheckedPluginList>org.apache.maven.plugins:maven-enforcer-plugin,org.apache.maven.plugins:maven-idea-plugin</unCheckedPluginList>
                </requirePluginVersions>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>