Banear dependencias en Maven


En ciertas ocasiones, queremos poder configurar que nuestro proyecto no use ciertas dependencias. De algún modo queremos prohibirlas o banearlas, incluso las dependencias que llegan transitivamente. Esto puede ser muy común cuando queremos migrar una librería, como por ejemplo, pasar de junit4 a junit5, o queremos que el sistema de logging sea slf4j y logback y queremos prohibir log4j, commons-logging o cualquier otra librería similar.

Prohibir dependencias es muy útil cuando queremos marcar bien las direcctrices de nuestro proyecto y que nadie, por desconocimiento o sin querer, añada dependencias no deseadas.

Para poder aplicar esta resctricción de dependencias haremos uso del plugin de maven enforcer:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>3.1.0</version>
</plugin>

y simplemente añadiremos la configuración en el pom raíz de nuestro proyecto indicando las dependencias que queremos excluir:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <version>3.1.0</version>
      <executions>
        <execution>
          <id>enforce-banned-dependencies</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <bannedDependencies>
                <excludes>
                  <exclude>junit:junit</exclude>
                </excludes>
              </bannedDependencies>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Con esta configuración, en el momento de que en el dependecy:tree del proyecto aparezca alguna de las dependencias baneadas, nos saltará el error:

[INFO] --- maven-enforcer-plugin:3.1.0:enforce (enforce-banned-dependencies) @ dev-utils-examples ---
[ERROR] Rule 0: org.apache.maven.plugins.enforcer.BannedDependencies failed with message:
Found Banned Dependency: junit:junit:jar:4.13.2
Use 'mvn dependency:tree' to locate the source of the banned dependencies.
[INFO] ------------------------------------------------------------------------

Como has podido ver en la configuración, es muy sencillo poder añadir estas reglas a cualquier proyecto Maven.

Avatar
Actualizado el 06 de noviembre de 2022
Comparte este artículo:
TwitterFacebookLinked In
Icon