Sur de gros projets, la gestion des dépendances avec Maven est quasiment indispensable. J'ai même dû mal à comprendre qu'on puisse faire sans.
Avec les dépendances transitives, on se retrouve vite à récupérer la terre entière et à avoir des dépendances qui utilisent des dépendances transitives communes mais dans des versions différentes...
On voit apparaître des exceptions du type "NoClassDefFoundError" à l'exécution et c'est là que le casse tête commence...
Voici ce que j'utilise pour résoudre ce genre de problème :
- la commande du plugin maven "dependency" pour découvrir les dépendances en double :
mvn dependency:tree
- La mise en place de tags d'exclusion au niveau des pom.xml pour permettre de définir une dépendance mais d'exclure certaines de ces dépendances transitives :
<dependency>
<groupId>yourDependencyGroupId</groupId>
<artifactId>yourDependencyArtifactId</artifactId>
<version>yourDependencyVersion</version>
<exclusions>
<exclusion>
<groupId>ExcludedTransitiveDependencyGroupId</groupId>
<artifactId>ExcludedTransitiveDependencyArtifactId</artifactId>
</exclusion>
</exclusions>
</dependency>