Une fonctionnalité de Maven est la gestion des dépendances. Sur ce point, Apache Ant sont « concurrent » ou plutôt son alternative n’offre pas d’équivalent. Il faut alors se tourner vers Apache Ivy pour avoir quelque chose d’équivalent, en fait quelque chose de mieux.
Mais même avec Maven, la gestion des dépendances peut devenir complexe. Ce problème de dépendance trouve certainement son origine dans le format des fichiers Jar. Une amélioration de ce format est prévu dans la version 7 du langage java. Il s’agit de JAM ou Java Module. Mais comme je travaille encore avec la version 5 de Java, il est fort probable que je vais continuer à rencontrer des problème sur les dépendances.
Dans un exemple récent, j’ai repris un ancien projet basé sur Xfire pour développer un service Web. Xfire n’est plus maintenu. Sa dernière version la 1.6 date de mai 2007. Je ne vous conseille donc pas l’utilisation de ce framework mais de passer à CFX.
Le projet initial n’était pas sous Maven. J’ai donc ajouter dans mon projet Eclipse dans le nouveau fichier pom, la dépendance suivante:
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
</dependency>
Ceci provoque l’ajout de 48 jar au niveau du Maven Dependancies du projet. Cette liste de dépendance n’est plus pas triée par ordre alphabétique. C’est sans doute le petit élément qui peut m’agacer le plus. Un petit survol montre que la liste de jars contient junit et jmock qui sont à priori inutile. Ceci vient sans doute également qu’Eclipse ignore la notion de scope au niveau des dépendances. Ainsi Junit devrait avoir le scope « test » pour indiquer qu’il est utilisé lors de la compilation et l’exécution des tests, pas lors de la compilation du code source.
Un plugin Maven « dependency » permet d’y voir un peu plus clair. La commande mvn depency:tree affiche les dépendances sous un forme arborescente et mvn dependency:copy-dependencies va copier l’ensemble des dépendances et les mettre dans le dossier target\depencies. Il est possible ensuite d’utiliser la commande exclude au niveau des dépendances maven pour faire un peu le trie.