Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    9.4.4. Dépendances transitives

    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.

    9.4.4.1. Dépendances transitives et scope

    Chacun des scopes présentés plus tôt dans la Section 9.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 9.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 9.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.