93 votes

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

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

Ejemplo:

$ 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

Note : 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 la même bibliothèque sur le classpath deux fois avec des versions différentes.

112voto

Raghuram Points 26896

Je ne sais pas comment Maven détermine cela. Il n'est pas nécessaire de prendre en compte tous les éléments signalés par celui-ci, mais cette information peut être utilisée de manière appropriée.

Dépendances non déclarées utilisées sont celles qui sont nécessaires, mais qui n'ont pas été explicitement déclarées comme dépendances dans votre projet. Elles sont cependant disponibles grâce à la dépendance transitive d'autres dépendances dans 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 (en l'adaptant éventuellement à la version fournie par votre runtime).

Quant à dépendances déclarées non utilisées c'est une bonne idée de les enlever. Pourquoi ajouter des dépendances inutiles à votre projet ? Mais la transitivité peut les amener 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 l'effet de la transitivité. version .

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

17voto

Zwakele Mgabhi Points 161

La réponse à :

"Comment détermine-t-on ceux qui sont inutilisés et ceux qui ne le sont pas ?".

Maven utilise Objet WebASM qui analyse votre bytecode brut. Il passe en revue toutes vos classes et construit ensuite une liste de toutes les classes auxquelles elles font référence. Voilà le comment.

Quant à ce qu'il faut 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 ne sont pas utilisées.

8voto

Yajli Maclo Points 926

Utilisé un dépendances déclarées
Simplement, il s'agit des dépendances transitives qui vous les utilisez mais SANS les déclarer explicitement dans votre fichier POM.

Dans le digramme ci-dessous, celui qui est de couleur orange.
enter image description here

Un conseil :
C'est une bonne idée de déclarer à l'intérieur de votre fichier POM pour être faiblement couplé à vos dépendances de premier niveau, ainsi dans le futur, s'ils prévoient de changer leur implémentation et de ne plus utiliser cette dépendance transitive, votre application sera en sécurité !

Un dépendances déclarées utilisées
Il s'agit simplement des dépendances qui vous les désencombrez dans votre fichier POM SANS les utiliser dans le code de votre application.

Dans le digramme ci-dessous, celui qui est coloré en rouge.
enter image description here

Un conseil :
C'est une bonne idée de supprimer de votre fichier POM, car elles ne sont pas utilisées et pour économiser la taille finale de l'artefact de l'application aussi pour éviter que tout développeur utilise de mauvaises classes par erreur !

2voto

Mohamed Rafeek Points 11

Cela peut être facilement corrigé en ajoutant ignoredUnusedDeclaredDependencies dans pom.xml

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <configuration>
                <ignoredUnusedDeclaredDependencies>
                    <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-api</ignoredUnusedDeclaredDependency>
                </ignoredUnusedDeclaredDependencies>
            </configuration>
        </execution>
    </executions>
 </plugin>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X