web-dev-qa-db-fra.com

Quelles sont les dépendances inutilisées / non déclarées dans Maven? Que faire avec eux?

Maven dependency:analyze se plaint des dépendances de mon projet. Comment détermine-t-il ceux qui ne sont pas utilisés et ceux qui ne sont pas déclarés? Que dois-je faire à leur sujet?

Exemple:

$ mvn dependency:analyze 
...
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING]    commons-logging:commons-logging:jar:1.1.1:compile
[WARNING]    commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING]    org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile

...
[WARNING] Unused declared dependencies found:
[WARNING]    commons-cli:commons-cli:jar:1.0:compile
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    org.Apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING]    commons-collections:commons-collections:jar:3.2:provided
[WARNING]    javax.mail:mail:jar:1.4:provided

Remarque: Beaucoup de ces dépendances sont utilisées dans mon conteneur d'exécution et je les ai déclarées comme fournies pour éviter d'avoir deux fois la même bibliothèque sur le chemin de classe avec des versions différentes.

60
b7kich

Je ne sais pas comment Maven détermine cela. Il n'est pas nécessaire de traiter tous les éléments signalés par cela, mais ces informations peuvent être utilisées selon les besoins.

dépendances non déclarées utilisées sont celles qui sont requises, mais qui n'ont pas été explicitement déclarées comme dépendances dans votre projet. Ils sont cependant disponibles grâce à la dépendance transitive d'autres dépendances de votre projet. C'est une bonne idée de déclarer explicitement ces dépendances. Cela vous permet également de contrôler la version de ces dépendances (correspondant peut-être à la version fournie par votre runtime).

Quant à dépendances déclarées inutilisées, c'est une bonne idée de les supprimer. Pourquoi ajouter une dépendance inutile à votre projet? Mais alors la transitivité peut les apporter de toute façon, peut-être, en conflit avec vos versions d'exécution. Dans ce cas, vous devrez les spécifier - essentiellement pour contrôler le version.

Au fait, mvn dependency:tree donne arbre des dépendances du projet, ce qui vous donne une meilleure perspective de la façon dont chaque dépendance s'intègre dans votre projet.

73
Raghuram

La réponse à:

"Comment détermine-t-il ceux qui ne sont pas utilisés et ceux qui ne sont pas déclarés?".

Maven utilise Object WebASM framework qui analyse votre bytecode brut. Il passe par toutes vos classes, puis construit une liste de toutes les classes référencées. Voilà comment.

Quant à savoir quoi faire, je ne recommanderais pas de supprimer les "dépendances déclarées inutilisées" à moins que vous ne soyez absolument sûr qu'elles sont réellement inutilisées.

5
Zwakele Mgabhi