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


    4.8.2. Explorer les dépendances de votre projet

    Le plugin Exec nous permet d'exécuter le programme Simple Weather sans avoir à charger les dépendances requises dans le classpath. Avec un autre système de build, nous aurions dû copier toutes les dépendances du programme dans une espèce de répertoire fourre-tout lib/ qui aurait contenu les fichiers JAR. Ensuite, nous aurions dû écrire un script basique qui aurait ajouté notre bytecode et nos dépendances dans un classpath. C'est seulement après tout cela que nous aurions pu exécuter java org.sonatype.mavenbook.weather.Main. Le plugin Exec profite du fait que Maven sait déjà comment créer et gérer votre classpath et vos dépendances.

    C'est très pratique, mais il est agréable de savoir de quoi se compose exactement le classpath de votre projet. Même si le projet ne dépend que de quelques bibliothèques dont Dom4J, Log4J, Jaxen et Velocity, il dépend aussi de dépendances transitives. Si vous avez besoin de connaître la composition de votre classpath, vous pouvez utiliser le plugin Maven Dependency pour afficher une liste des dépendances résolues. Afin d'afficher cette liste pour le projet Simple Weather, exécutez le goal dependency:resolve :

    $ mvn dependency:resolve
    ...
    [INFO] [dependency:resolve]
    [INFO] 
    [INFO] The following files have been resolved: 
    [INFO]    com.ibm.icu:icu4j:jar:2.6.1 (scope = compile)
    [INFO]    commons-collections:commons-collections:jar:3.1 (scope = compile)
    [INFO]    commons-lang:commons-lang:jar:2.1 (scope = compile)
    [INFO]    dom4j:dom4j:jar:1.6.1 (scope = compile)
    [INFO]    jaxen:jaxen:jar:1.1.1 (scope = compile)
    [INFO]    jdom:jdom:jar:1.0 (scope = compile)
    [INFO]    junit:junit:jar:3.8.1 (scope = test)
    [INFO]    log4j:log4j:jar:1.2.14 (scope = compile)
    [INFO]    oro:oro:jar:2.0.8 (scope = compile)
    [INFO]    velocity:velocity:jar:1.5 (scope = compile)
    [INFO]    xalan:xalan:jar:2.6.0 (scope = compile)
    [INFO]    xerces:xercesImpl:jar:2.6.2 (scope = compile)
    [INFO]    xerces:xmlParserAPIs:jar:2.6.2 (scope = compile)
    [INFO]    xml-apis:xml-apis:jar:1.0.b2 (scope = compile)
    [INFO]    xom:xom:jar:1.0 (scope = compile)
    

    Comme vous pouvez vous en rendre compte, notre projet possède un grand nombre de dépendances. Alors que nous n'avons inclus que quatre bibliothèques comme dépendances directes, nous avons en fait 15 dépendances. Dom4J dépend de Xerces et des XML Parser APIs, Jaxen dépend de la présence de Xalan dans le classpath. Le plugin Dependency va afficher la combinaison finale des dépendances utilisées pour compiler votre projet. Si vous voulez connaître l'arbre complet des dépendances de votre projet, vous pouvez exécuter le goal dependency:tree.

    $ mvn dependency:tree
    ...
    [INFO] [dependency:tree]
    [INFO] org.sonatype.mavenbook.custom:simple-weather:jar:1.0
    [INFO] +- log4j:log4j:jar:1.2.14:compile
    [INFO] +- dom4j:dom4j:jar:1.6.1:compile
    [INFO] |  \- xml-apis:xml-apis:jar:1.0.b2:compile
    [INFO] +- jaxen:jaxen:jar:1.1.1:compile
    [INFO] |  +- jdom:jdom:jar:1.0:compile
    [INFO] |  +- xerces:xercesImpl:jar:2.6.2:compile
    [INFO] |  \- xom:xom:jar:1.0:compile
    [INFO] |     +- xerces:xmlParserAPIs:jar:2.6.2:compile
    [INFO] |     +- xalan:xalan:jar:2.6.0:compile
    [INFO] |     \- com.ibm.icu:icu4j:jar:2.6.1:compile
    [INFO] +- velocity:velocity:jar:1.5:compile
    [INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
    [INFO] |  +- commons-lang:commons-lang:jar:2.1:compile
    [INFO] |  \- oro:oro:jar:2.0.8:compile
    [INFO] +- org.apache.commons:commons-io:jar:1.3.2:test
    [INFO] \- junit:junit:jar:3.8.1:test
    ...

    Si vous êtes aventurier dans l'âme ou si vous voulez voir le chemin complet des dépendances, avec les artefacts qui ont été rejetés à cause d'un conflit ou pour toute autre raison, exécutez Maven avec le flag debug.

    $ mvn install -X
    ...
    [DEBUG] org.sonatype.mavenbook.custom:simple-weather:jar:1.0 (selected for null)
    [DEBUG]   log4j:log4j:jar:1.2.14:compile (selected for compile)
    [DEBUG]   dom4j:dom4j:jar:1.6.1:compile (selected for compile)
    [DEBUG]     xml-apis:xml-apis:jar:1.0.b2:compile (selected for compile)
    [DEBUG]   jaxen:jaxen:jar:1.1.1:compile (selected for compile)
    [DEBUG]     jaxen:jaxen:jar:1.1-beta-6:compile (removed - )
    [DEBUG]     jaxen:jaxen:jar:1.0-FCS:compile (removed - )
    [DEBUG]     jdom:jdom:jar:1.0:compile (selected for compile)
    [DEBUG]     xml-apis:xml-apis:jar:1.3.02:compile (removed - nearer: 1.0.b2)
    [DEBUG]     xerces:xercesImpl:jar:2.6.2:compile (selected for compile)
    [DEBUG]     xom:xom:jar:1.0:compile (selected for compile)
    [DEBUG]       xerces:xmlParserAPIs:jar:2.6.2:compile (selected for compile)
    [DEBUG]       xalan:xalan:jar:2.6.0:compile (selected for compile)
    [DEBUG]       xml-apis:xml-apis:1.0.b2.
    [DEBUG]       com.ibm.icu:icu4j:jar:2.6.1:compile (selected for compile)
    [DEBUG]   velocity:velocity:jar:1.5:compile (selected for compile)
    [DEBUG]     commons-collections:commons-collections:jar:3.1:compile (selected for compile)
    [DEBUG]     commons-lang:commons-lang:jar:2.1:compile (selected for compile)
    [DEBUG]     oro:oro:jar:2.0.8:compile (selected for compile)
    [DEBUG]   junit:junit:jar:3.8.1:test (selected for test)
    

    Dans la sortie de debug, vous voyez les rouages du mécanisme de gestion de dépendances. Ce que vous voyez ici c'est l'arbre des dépendances de ce projet. Maven affiche les coordonnées Maven complètes de toutes les dépendances de votre projet ainsi que les dépendances de vos dépendances (et les dépendances des dépendances de vos dépendances). Vous pouvez voir que le projet simple-weather dépend de jaxen, qui dépend de xom, qui à son tour dépend de icu4j. Vous pouvez voir aussi que Maven construit ce graphe de dépendances en supprimant les doublons et en résolvant les conflits entre différentes versions. Si vous avez un problème avec certaines dépendances, il est souvent utile d'aller plus loin que la simple liste produite par dependency:resolve. Activer les traces en mode debug, vous permet de voir comment fonctionne le mécanisme de résolution des dépendances de Maven.