En effet, Maven ne se comporte pas comme du Ant ou un Makefile.
Maven, il faut bien l'avouer, n'a rien inventé. Il s'est inspiré de la vie. Encore fallait-il y penser.
Un produit (jar, war, un téléphone...) est régit par la loi de la nature. Il y a un cycle. De la naissance à la retraite (on va s'arrêter là c'est mieux).
Suivant le produit, le cycle de vie n'est pas le même. Maven définit des produits standard, à savoir des packaging : pom, jar, maven-plugin, ejb, war, ear, rar, par.
Tous c'est package ont le même cycle de vie.
Un cycle de vie c'est quoi ?
Toujours comme la vrai vie. Un être humain sera : foetus, bébé, enfant, adolescent, adulte, retraité.
Ce sont les phases de la vie.
Un jar aura donc comme phases dans son cycle de vie :
validate initialize generate-sources process-sources generate-resources process-resources compile process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources test-compile process-test-classes test prepare-package package pre-integration-test integration-test post-integration-test verify install deployD'abord, il y a validation de la structure du pom.xml, puis initialisation...
Et comme dans la vrai vie, il y a dans chaque phase, des étapes appelées goal dans maven.
Je pense qu'une des incompréhension vient d'une mauvaise traduction du mot goal (ce n'est pas un but).
Si on prend un être humain, dans la phase adulte, il passe son permit voiture, achète une voiture, s'installe en couple, se marie, achète une maison... Ce sont bien des étapes.
Les étapes (goal) sont dans un ordre bien définit. Cet ordre est lui aussi définit dans le cycle de vie.
Peut-on redéfinir un cycle de vie ?
Oui, pour cela, il faut créer un nouveau packaging (exemple zip). Mais là, c'est une autre histoire.
Donc, si on résume :
Un cycle de vie contient des phases, qui elles même contiennent des goals.
Une chose à se rappeler, si on lance un plugin dans un goal donné (qui donc appartient à une phase), toutes les phases et goals se situant avant seront exécutés.
Il faut quand même savoir qu'il est possible d'avoir des goals non attachés à une phase. Mais bon, c'est pour plus tard.