Uso del plugin MAVEN ENFORCER

PAUT-0085 (Pauta)

Se recomienda el uso del plugin maven-enforcer-plugin para dejar constancia de las restricciones relativas al entorno de desarrollo de un proyecto determinado. El plugin Enforcer proporciona medios para controlar algunas restricciones relativas al proyecto como la versión de Maven, la versión del JDK, así como un conjunto de reglas standard.

Se pueden definir algunas restricciones como:

  • Versión de Maven requerida
  • Versión de Java requerida
  • Sistema operativo requerido
  • Banear dependencias y plugins definidos como exclusions
  • Asegurar que todas las dependencias convergen hacia la misma versión, no permitiendo el uso de distintas versiones de un mismo artefacto
  • Asegurar la no inclusión de snapshots en las dependencias
  • Asegurar que el artefacto no es una snapshot

De esta manera, haciendo uso de este plugin se ayuda a mantener la reproducibilidad de los proyectos en cualquier otro entorno. En el siguiente ejemplo se fuerza a:

  • usar la versión 2.2.1 de Maven
  • usar la versión 1.5 de Java
  • usar un sistema operativo de la familia Unix
  • que la versión en el pom no puede ser una SNAPSHOT
<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>2.2.1</version>
                </requireMavenVersion>
                <requireJavaVersion>
                  <version>1.5</version>
                </requireJavaVersion>
                <requireOS>
                  <family>unix</family>
                </requireOS>
                <requireReleaseVersion>
                  <message>No se permite una versión Snapshot</message>
                </requireReleaseVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>