| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Une dépendance transitive est la dépendance d'une dépendance. Si le projet-a dépend du projet-b, qui lui-même dépend à son tour
du projet-c, alors le projet-c est une dépendance transitive du
projet-a. Si le projet-c dépendait du projet-d, alors le
projet-d serait lui aussi une dépendance transitive du projet-a. Un des
grands intérêts de Maven et qu'il sait gérer les dépendances transitives. Il évite ainsi au développeur d'avoir à
gérer l'ensemble des dépendances nécessaires pour compiler et exécuter une application. Vous pouvez ainsi dépendre
uniquement de Spring sans avoir à gérer toutes les dépendances de Spring.
Maven réalise cette opération en construisant un graphe des dépendances et en gérant les conflits et les
recouvrements qui pourraient arriver. Par exemple, si Maven s'aperçoit que deux projets dépendent des mêmes
groupId et artifactId, il va automatiquement trouver la dépendance à
utiliser, en favorisant toujours la version la plus récente. Même si tout cela semble fort pratique, il existe un
certain nombre de cas où les dépendances transitives peuvent entraîner des problèmes de configuration. Dans ce
cas, vous pouvez utiliser l'exclusion de dépendance.
Chacun des scopes présentés plus tôt dans la Section 3.4.1, « Scope de dépendance » affecte non seulement le scope de la dépendance dans le projet, mais aussi le comportement transitif de cette dépendance. La manière la plus simple de présenter tout cela est sous la forme d'un tableau, comme celui du Tableau 3.1, « Comment le scope affecte les dépendances transitives ». Les scopes dans la première ligne représentent le scope d'une dépendance transitive. Les scopes dans la colonne de gauche représentent le scope de la dépendance directe. L'intersection des lignes et des colonnes donne le scope de la dépendance transitive. Une cellule vide indique que la dépendance transitive ne sera pas prise en compte.
Tableau 3.1. Comment le scope affecte les dépendances transitives
| Scope Direct | Scope Transitif | |||
|---|---|---|---|---|
| compile | provided | runtime | test | |
| compile | compile | - | runtime | - |
| provided | provided | provided | provided | - |
| runtime | runtime | - | runtime | - |
| test | test | - | test | - |
Pour illustrer la relation entre le scope d'une dépendance transitive et le scope d'une dépendance
directe, voici quelques exemples. Si le projet-a possède une dépendance dans le scope test
vers le projet-b qui a une dépendance dans le scope compile vers le
projet-c. Le projet-c sera donc une dépendance transitive du
projet-a dans le scope test.
Vous pouvez voir cela comme une ligne de transitivité qui agit comme un filtre sur le scope de dépendance. Les dépendances transitives qui sont dans les scopes test et provided n'ont en général pas d'effet sur un projet. L'exception à cette règle concerne les dépendances transitives provided de dépendances elles-aussi provided qui seront donc des dépendances dans le scope provided du projet. Les dépendances transitives qui sont dans les scopes compile et runtime affectent le projet quelque soit le scope de la dépendance directe. Les dépendances transitives qui sont dans le scope compile resteront dans ce scope quelque soit le scope de la dépendance directe. Les dépendances transitives qui sont dans le scope runtime seront en général dans le même scope que la dépendance directe sauf lorsque cette dernière est dans le scope compile. Quand une dépendance transitive est dans le scope runtime et que la dépendance directe est dans le scope compile alors la dépendance transitive sera dans le scope effectif runtime.