| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
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.
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:resourcesLe 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:compileLe 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:testResourcesLe 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:testCompileLe 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:testLe 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:jarLe goal jar du plugin Jar est lié à la phase package. Ce goal package le contenu du répertoire cible en un
fichier JAR.
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.