Lute contra o inferno da dependência em Maven

Você já usou o Maven em algum de seus projetos? Primeiro, você provavelmente ficou surpreso com a maneira como pode declarar dependências e usar todos os plug-ins legais. Então você pode perceber que o tratamento de dependências transitivas está resolvido … bem, deixe-me dizer que poderia ser melhor. Mas há outro plugin Maven que o ajuda a limpar suas dependências e também a garantir que dependências transitivas nunca farão com que suas definições de dependência apodreçam novamente.

Conforme mencionado nesta postagem do blog , o plug-in Enforcer Maven ajuda. Ele oferece uma regra de convergência de dependência que verifica o seguinte:

Se um projeto tiver duas dependências, A e B, ambas dependendo do mesmo artefato, C, esta regra falhará na construção se A depender de uma versão diferente de C, então a versão de C dependia de B.

Isso é exatamente o que desejo em todos os meus projetos gerenciados pela Maven! Portanto, adiciono o plug-in do enforcer ao arquivo pom e habilito a DependencyConvergenceregra. Acho útil quando o plugin do enforcer é executado durante a fase de validação. Isso faz com que o build seja interrompido antes da compilação se as dependências não convergirem. Em seguida, você deve excluir as dependências transitivas indesejadas ou alterar as versões. Muito conveniente!

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<rules>
<DependencyConvergence/>
</rules>
</configuration>
<executions>
<execution>
<id>enforce</id>
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
</plugin>

Experimente isso em um de seus projetos. Você ficará bastante surpreso com a bagunça que são suas verdadeiras definições de dependência.