Quels sont les objectives et les phases de Maven et quelle est leur différence?

Quelle est la différence / relation entre les objectives et les phases de Maven? Comment sont-ils liés les uns aux autres?

Les objectives sont exécutés dans des phases qui aident à déterminer les objectives d’exécution de l’ordre. La meilleure compréhension consiste à examiner les liaisons de cycle de vie Maven par défaut, qui indiquent les objectives exécutés par défaut. Les objectives de la phase de compilation seront toujours exécutés avant les objectives de la phase de test, qui seront toujours exécutés avant les objectives de la phase du package, etc.

Une partie de la confusion est exacerbée par le fait que lorsque vous exécutez maven, vous pouvez spécifier un objective ou une phase. Si vous spécifiez une phase, maven exécutera toutes les phases jusqu’à la phase que vous avez spécifiée dans l’ordre (par exemple, si vous spécifiez un paquet, il passera d’abord par la phase de compilation puis par la phase de test et enfin par phase). exécuter tous les objectives attachés à cette phase.

Lorsque vous créez une exécution de plug-in dans votre fichier de construction Maven et que vous ne spécifiez que l’objective, cela lie cet objective à une phase par défaut. Par exemple, l’objective jaxb: xjc se lie par défaut à la phase generate-resources. Cependant, lorsque vous spécifiez l’exécution, vous pouvez également spécifier explicitement la phase pour cet objective.

Si vous spécifiez un objective lorsque vous exécutez Maven, toutes les phases seront exécutées jusqu’à la phase correspondant à cet objective. En d’autres termes, si vous spécifiez l’objective JAR, toutes les phases seront exécutées jusqu’à la phase du package (et tous les objectives de ces phases), puis l’exécution de l’objective JAR.

Le cycle de vie est une séquence de phases nommées.
Les phases s’exécutent de manière séquentielle. L’exécution d’un moyen de phase exécute toutes les phases précédentes.

Plugin est un ensemble d’ objectives également appelé MOJO ( M aven O ld J ava O bject).
Analogie: Le plugin est une classe et les objectives sont des méthodes au sein de la classe.

Maven est basé sur le concept central du cycle de vie de la construction.
Il existe trois cycles de vie de construction intégrés:

  1. défaut
  2. nettoyer
  3. site

Chaque cycle de vie est constitué de phases

Par exemple, le cycle de vie default comprend les phases de construction suivantes:

 ◾validate - validate the project is correct and all necessary information is available ◾comstack - comstack the source code of the project ◾test - test the comstackd source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed ◾package - take the comstackd code and package it in its dissortingbutable format, such as a JAR. ◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run ◾verify - run any checks to verify the package is valid and meets quality criteria ◾install - install the package into the local repository, for use as a dependency in other projects locally ◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. 

Donc, pour passer par les phases ci-dessus, il suffit d’appeler une commande:

 mvn  { Ex: mvn install } 

Pour la commande ci-dessus, à partir de la première phase, toutes les phases sont exécutées séquentiellement jusqu’à la phase “installation”. mvn peut soit exécuter un objective ou une phase (voire plusieurs objectives ou plusieurs phases) comme suit:

 mvn clean install plugin:goal 

Cependant, si vous souhaitez personnaliser le préfixe utilisé pour référencer votre plug-in, vous pouvez spécifier le préfixe directement via un paramètre de configuration du maven-plugin-plugin dans le POM de votre plug-in.

Une phase de construction est composée d’ objectives de plugin

La plupart des fonctionnalités de Maven sont des plugins. Un plugin fournit un ensemble d’ objectives pouvant être exécutés à l’aide de la syntaxe suivante:

  mvn [plugin-name]:[goal-name] 

Par exemple, un projet Java peut être compilé avec l’objective de compilation du compilateur en exécutant le mvn comstackr:comstack .

Le cycle de vie de la construction est une liste de phases nommées pouvant être utilisées pour ordonner l’exécution d’un objective.

Les objectives fournis par les plug-ins peuvent être associés à différentes phases du cycle de vie. Par exemple, par défaut, le comstackr:comstack objectives comstackr:comstack est associé à la phase de comstack , tandis que l’ objective est surefire:test est associé à la phase de test . Considérez la commande suivante:

 mvn test 

Lorsque la commande précédente est exécutée, Maven exécute tous les objectives associés à chacune des phases, y compris la phase de test . Dans un tel cas, Maven exécute l’objective de resources:resources associé à la phase process-resources , puis comstackr:comstack , et ainsi de suite jusqu’à ce qu’il exécute finalement l’ surefire:test .

Cependant, même si une phase de construction est responsable d’une étape spécifique du cycle de vie de la construction, la manière dont elle s’acquitte de ces responsabilités peut varier. Et cela se fait en déclarant les objectives du plug-in liés à ces phases de construction.

Un objective de plugin représente une tâche spécifique (plus fine qu’une phase de construction) qui consortingbue à la création et à la gestion d’un projet. Il peut être lié à zéro ou plusieurs phases de construction. Un objective non lié à une phase de construction peut être exécuté en dehors de son cycle de vie par invocation directe. L’ordre d’exécution dépend de l’ordre dans lequel les objectives et la ou les phases de construction sont appelés. Par exemple, considérez la commande ci-dessous. Les arguments clean et package sont des phases de construction, tandis que la dependency:copy-dependencies est un objective (d’un plugin).

 mvn clean dependency:copy-dependencies package 

Si cela devait être exécuté, la phase de clean sera exécutée en premier (ce qui signifie qu’elle exécutera toutes les phases précédentes du cycle de vie propre, plus la phase de clean proprement dite), puis la dependency:copy-dependencies (et toutes ses phases de construction précédentes du cycle de vie par défaut).

De plus, si un objective est lié à une ou plusieurs phases de construction, cet objective sera appelé dans toutes ces phases.

De plus, une phase de construction peut également comporter zéro ou plusieurs objectives. Si une phase de construction ne comporte aucun objective, cette phase de construction ne sera pas exécutée. Mais si un ou plusieurs objectives lui sont liés, il atteindra tous ces objectives.

Liaisons de cycle de vie intégrées
Certaines phases ont des objectives qui leur sont liés par défaut. Et pour le cycle de vie par défaut, ces liaisons dépendent de la valeur de l’emballage.

Maven Architecture:

entrer la description de l'image ici

Référence 1
Référence 2

La réponse choisie est géniale, mais j’aimerais néanmoins append quelque chose de petit au sujet. Une illustration.

Il montre clairement comment les différentes phases se sont liées aux différents plugins et aux objectives exposés par ces plugins.

Examinons donc un cas d’exécution de quelque chose comme mvn comstack :

  • C’est une phase qui exécute le plugin du compilateur avec l’ objective de compilation
  • Le plugin du compilateur avait différents objectives. Pour mvn comstack il est mvn comstack à un objective spécifique, l’objective de compilation.
  • C’est la même chose que d’exécuter le mvn comstackr:comstack

Par conséquent, la phase est constituée des objectives du plug-in .

entrer la description de l'image ici

Lien vers la référence

Les définitions sont détaillées sur la page du site Maven Introduction au cycle de vie Build , mais j’ai essayé de résumer :

Maven définit 4 éléments d’un processus de construction:

  1. Cycle de la vie

    Trois cycles de vie intégrés (également appelés cycles de vie de construction ): default , clean , site . ( Référence du cycle de vie )

  2. Phase

    Chaque cycle de vie est constitué de phases , par exemple pour le cycle de vie default : comstack , test , comstack , install , etc.

  3. Brancher

    Un artefact qui fournit un ou plusieurs objectives.

    Basé sur le type d’emballage ( jar , war , etc.), les objectives des plugins sont liés aux phases par défaut. ( Liaisons de cycle de vie intégrées )

  4. Objectif

    La tâche (action) exécutée. Un plugin peut avoir un ou plusieurs objectives.

    Un ou plusieurs objectives doivent être spécifiés lors de la configuration d’un plug-in dans un POM . En outre, si un plug-in n’a pas de phase définie par défaut, le ou les objectives spécifiés peuvent être liés à une phase.

Maven peut être invoqué avec:

  1. une phase (par exemple clean , package )
  2. : (par exemple dependency:copy-dependencies )
  3. :[:]: (par exemple org.apache.maven.plugins:maven-comstackr-plugin:3.7.0:comstack )

avec une ou plusieurs combinaisons de tout ou partie, p.ex.:

 mvn clean dependency:copy-dependencies package 

Nous remercions Sandeep Jindal et Premraj. Leur explication m’aide à comprendre après une certaine confusion à ce sujet.

J’ai créé quelques exemples de code complet et quelques explications simples ici https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Je pense que cela peut aider les autres à comprendre.

En bref, à partir du lien, vous ne devriez pas essayer de comprendre les trois à la fois, vous devez d’abord comprendre la relation dans ces groupes:

  • Cycle de vie vs phase
  • Plugin vs objective

1. Cycle de vie vs phase

Cycle de vie est un ensemble de phases en séquence, voir ici les références du cycle de vie . Lorsque vous appelez une phase , elle appelle également toutes les phases précédentes.

Par exemple, le cycle de vie propre comporte trois phases ( pré-nettoyage, nettoyage, post-nettoyage ).

 mvn clean 

Il appellera pré-nettoyage et propre .

2. Plugin vs objective

Goal est comme une action dans Plugin . Donc, si le plugin est une classe, le but est une méthode.

vous pouvez appeler un objective comme celui-ci:

 mvn clean:clean 

Cela signifie “appeler le but propre, dans le plug-in propre” (Rien ne concerne la phase propre ici. Ne laissez pas le mot “nettoyer” vous confondre, ils ne sont pas les mêmes!)

3. Maintenant la relation entre Phase & Goal:

Phase peut (pré) établir un lien avec le ou les buts . Par exemple, normalement, la phase propre est liée au but propre. Donc, quand vous appelez cette commande:

 mvn clean 

Il appellera la phase de pré-nettoyage et la phase de nettoyage qui sont liées au but propre: propre.

C’est presque la même chose que:

 mvn pre-clean clean:clean 

Plus de détails et des exemples complets sont dans https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/

Terminologie de travail Maven comportant des phases et des objectives.

Phase: La phase Maven est un ensemble d’actions associé à 2 ou 3 buts.

exmaple: – si vous lancez mvn clean

c’est la phase exécutera le but mvn clean: clean

But: Le but de Maven lié à la phase

pour référence http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html

Il y a trois cycles de vie de construction intégrés suivants:

  • défaut
  • nettoyer
  • site

Cycle de vie par défaut -> [valider, initialiser, générer des sources, sources de processus, générer des ressources, ressources de processus, comstackr, classes de processus, générer des sources de test, sources de test de processus, générer des ressources de test, processus -test-resources, test-comstack, classes de test de processus, test, prepare-package, package, test de pré-intégration, test d’intégration, post-intégration-test, vérification, installation, déploiement]

Cycle de vie propre -> [pré-nettoyage, nettoyage, post-nettoyage]

Site de cycle de vie -> [pré-site, site, post-site, site-deploy]

Le stream est séquentiel, par exemple, pour le cycle de vie par défaut , il commence par valider , puis s’initialise , etc.

Vous pouvez vérifier le cycle de vie en activant le mode débogage de mvn exemple mvn -X