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


    3.5.2. Cycle de vie de Maven

    La deuxième commande que nous avons exécutée dans la section précédente était mvn install. Cette commande n'appelle pas le goal d'un plugin, mais une phase du cycle de vie de Maven. Une phase est une des étapes de ce que Maven appelle "le cycle de vie du build". Le cycle de vie du build est une suite ordonnée de phases aboutissant à la construction d'un projet. Maven peut supporter différents cycles de vie, mais celui qui reste le plus utilisé est le cycle de vie par défaut de Maven, qui commence par une phase de validation de l'intégrité du projet et se termine par une phase qui déploie le projet en production. Les phases du cycle de vie sont laissées vagues intentionnellement, définies comme validation, test, ou déploiement elles peuvent avoir un sens différent selon le contexte des projets. Par exemple, pour un projet qui produit une archive Java, la phase package va construire un JAR ; pour un projet qui produit une application web, elle produira un fichier WAR.

    Les goals des plugins peuvent être rattachés à une phase du cycle de vie. Pendant que Maven parcourt les phases du cycle de vie, il exécute les goals rattachés à chacune d'entre elles. On peut rattacher de zéro à plusieurs goals à chaque phase. Dans la section précédente, quand vous avez exécuté mvn install, il se peut que vous ayez remarqué que plusieurs goals s'étaient exécutés. Regardez la sortie après avoir exécuté mvn install et relevez les différents goals qui ont été exécutés. Lorsque ce simple exemple atteint la phase package, il exécute le goal jar du plugin Jar. Puisque notre projet Quickstart a (par défaut) un packaging de type jar, le goal jar:jar est rattaché à la phase package.

    Un goal est rattaché à une phase

    Figure 3.2. Un goal est rattaché à une phase


    Nous savons que la phase package va créer un fichier JAR pour un projet ayant un packaging de type jar. Mais qu'en est-il des goals qui la précèdent, comme compiler:compile et surefire:test ? Ces goals s'exécutent lors des phases qui précèdent la phase package selon le cycle de vie de Maven ; exécuter une phase provoque l'exécution de l'ensemble des phases qui la précèdent, le tout se terminant par la phase spécifiée sur la ligne de commande. Chaque phase se compose de zéro à plusieurs goals, et puisque nous n'avons configuré ou personnalisé aucun plugin, cet exemple rattache un ensemble de goals standards au cycle de vie par défaut. Les goals suivants ont été exécutés dans l'ordre pendant que Maven parcourait le cycle de vie par défaut jusqu'à la phase package :

    resources:resources

    Le goal resources du plugin Resources est rattaché à la phase process-resources. Ce goal copie toutes les ressources du répertoire src/main/resources et des autres répertoires configurés comme contenant des ressources dans le répertoire cible.

    compiler:compile

    Le goal compile du plugin Compiler est lié à la phase compile. Ce goal compile tout le code source du répertoire src/main/java et des autres répertoires configurés comme contenant du code source dans le répertoire cible.

    resources:testResources

    Le goal testResources du plugin Resources est lié à la phase process-test-resources. Ce goal copie toutes les ressources du répertoire src/test/resources et des autres répertoires configurés comme contenant des ressources de test dans le répertoire cible pour les tests.

    compiler:testCompile

    Le goal testCompile du plugin Compiler est rattaché à la phase test-compile. Ce goal compile les tests unitaires du répertoire src/test/java et des autres répertoires configurés comme contenant du code source de test dans le répertoire cible pour les tests.

    surefire:test

    Le goal test du plugin Surefire est rattaché à la phase test. Ce goal exécute tous les tests et produit des fichiers contenant leurs résultats détaillés. Par défaut, le goal arrêtera le build en cas d'échec de l'un des tests.

    jar:jar

    Le goal jar du plugin Jar est lié à la phase package. Ce goal package le contenu du répertoire cible en un fichier JAR.

    Les goals sont lancés à l'exécution de la phase à laquelle ils sont rattachés

    Figure 3.3. Les goals sont lancés à l'exécution de la phase à laquelle ils sont rattachés


    Pour résumer, lorsque nous avons exécuté mvn install, Maven exécute toutes les phases jusqu'à la phase install, et pour cela il parcourt toutes les phases du cycle de vie, exécutant tous les goals liés à chacune de ces phases. Au lieu d'exécuter une des phases du cycle de vie de Maven, vous pourriez obtenir le même résultat en spécifiant une liste de goals de plugin de la manière suivante :

    mvn resources:resources \
        compiler:compile \
        resources:testResources \
        compiler:testCompile \
        surefire:test \
        jar:jar \
        install:install
            

    Il est beaucoup plus simple d'exécuter les phases du cycle de vie plutôt que de lister explicitement les goals à exécuter en ligne de commande, de plus, ce cycle de vie commun permet à chaque projet utilisant Maven d'adhérer à un ensemble de standards bien définis. C'est ce cycle de vie qui permet à un développeur de passer d'un projet à l'autre sans connaître tous les détails du build de chacun d'entre eux. Si vous savez construire un projet Maven, vous savez tous les construire.