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.