357 votes

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

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

3 votes

Questions et réponses répondu à sur Maven : Cycle de vie vs. phase vs. plugin vs. objectif (une fois de plus).

1 votes

277voto

Pace Points 10393

Les objectifs sont exécutés par phases, ce qui permet de déterminer l'ordre dans lequel les objectifs sont exécutés. La meilleure façon de comprendre cela est d'examiner le modèle de l'objectif. liaisons par défaut du cycle de vie de Maven qui montre quels objectifs sont exécutés dans quelles phases par défaut. Le site compile seront toujours exécutés avant les objectifs de la phase test qui seront toujours exécutés avant les objectifs de la phase package les objectifs des phases et ainsi de suite.

Une partie de la confusion est exacerbée par le fait que lorsque vous exécutez Maven, vous pouvez spécifier un objectif ou une phase. Si vous spécifiez une phase, Maven exécutera dans l'ordre toutes les phases jusqu'à celle que vous avez spécifiée (par exemple, si vous spécifiez package, il exécutera d'abord la phase de compilation, puis la phase de test et enfin la phase de package) et pour chaque phase, il exécutera tous les objectifs liés à cette phase.

Lorsque vous créez une exécution de plugin dans votre fichier de construction Maven et que vous ne spécifiez que l'objectif, il liera cet objectif à une phase par défaut donnée. Par exemple, l'objectif jaxb:xjc se lie par défaut à l'objectif generate-resources phase. Cependant, lorsque vous spécifiez l'exécution, vous pouvez également spécifier explicitement la phase pour cet objectif.

Si vous spécifiez un objectif lorsque vous exécutez Maven, il exécutera cet objectif et uniquement cet objectif. En d'autres termes, si vous spécifiez l'objectif jar:jar il n'exécutera que le jar:jar pour empaqueter votre code dans un jar. Si vous n'avez pas précédemment exécuté l'objectif de compilation ou préparé votre code compilé d'une autre manière, cela peut très probablement échouer.

14 votes

J'ai pris l'habitude de dire "Maven". passe toutes les phases (jusqu'à et y compris le donné) " au lieu de "runs" ou "exécute" (ce dernier comme il est appelé dans l'interface de Maven). Introduction au cycle de vie de la construction ). Cela permet de le distinguer plus clairement du code de l'objectif qui est réellement exécuté. Mais c'est peut-être un goût personnel.

0 votes

Mais nous pouvons également exécuter des objectifs qui n'appartiennent à aucune phase, à savoir mvn archetype:generate et dans ce cas, maven n'exécute que l'objectif ?

0 votes

Vérifiez le dernier paragraphe. Non, il ne s'agit pas seulement d'exécuter le but.

222voto

premraj Points 120

Le cycle de vie est une séquence d'activités nommées phases .
Les phases s'exécutent de manière séquentielle. L'exécution d'une phase entraîne l'exécution de toutes les phases précédentes.

Le plugin est une collection de objectifs également appelé MOJO ( M aven O ld J ava O bjet).
Analogie : Plugin est une classe et les objectifs sont des méthodes au sein de la classe.

Maven s'articule autour du concept central d'une Cycles de vie des bâtiments . A l'intérieur de chaque Cycles de vie des bâtiments il y a Phases de construction et à l'intérieur de chaque Phases de construction il y a Objectifs de construction .

Nous pouvons exécuter soit une phase de construction, soit un objectif de construction. Lorsque nous exécutons une phase de construction, nous exécutons tous les objectifs de construction de cette phase. Les objectifs de construction sont affectés à une ou plusieurs phases de construction. Nous pouvons également exécuter un objectif de construction directement.

Il y a trois principaux éléments intégrés Cycles de vie des bâtiments :

  1. par défaut
  2. nettoyer
  3. site

Chaque cycle de vie de la construction est constitué de phases

Par exemple, le default Le cycle de vie comprend les éléments suivants Phases de construction :

validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable 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.

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

mvn <phase> { Ex: mvn install }

Pour la commande ci-dessus, en commençant par la première phase, toutes les phases sont exécutées séquentiellement jusqu'à la phase "installer". mvn peut soit exécuter un objectif ou une phase (ou même plusieurs objectifs ou plusieurs phases) comme suit :

mvn clean install plugin:goal  

Cependant, si vous souhaitez personnaliser le préfixe utilisé pour référencer votre plugin, vous pouvez spécifier le préfixe directement par le biais d'un paramètre de configuration sur la page d'accueil de l'interface utilisateur. maven-plugin-plugin dans votre La plugin est POM.

Une phase de construction se compose de Plugin Objectifs

La plupart des fonctionnalités de Maven se trouvent dans les plugins. Un plugin fournit un ensemble de objectifs qui peut être exécuté en utilisant la syntaxe suivante :

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

Par exemple, un projet Java peut être compilé avec l'objectif de compilation du plugin de compilation en exécutant les commandes suivantes mvn compiler:compile .

Le cycle de vie de la construction est une liste de phases nommées qui peuvent être utilisées pour donner un ordre à l'exécution des objectifs.

Les objectifs fournis par les plugins peuvent être associés à différentes phases du cycle de vie. Par exemple, par défaut, le objectif compiler:compile est associé à la compile phase tandis que le objectif surefire:test est associé à la test phase . Considérez la commande suivante :

mvn test

Lorsque la commande précédente est exécutée, Maven exécute tous les objectifs associés à chacune des phases jusqu'à et y compris le test phase. Dans un tel cas, Maven exécute le resources:resources objectif associé à la process-resources phase, puis compiler:compile et ainsi de suite jusqu'à ce qu'il exécute finalement le surefire:test objectif.

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 ceci est fait en déclarant les objectifs du plugin liés à ces phases de construction.

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

mvn clean dependency:copy-dependencies package

Si cela devait être exécuté, le clean sera exécutée en premier (c'est-à-dire qu'elle exécutera toutes les phases précédentes du cycle de vie du nettoyage, plus la phase clean elle-même), et ensuite la dependency:copy-dependencies avant d'exécuter finalement l'objectif package (et toutes ses phases de construction précédentes du cycle de vie par défaut).

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

En outre, une phase de construction peut également avoir zéro ou plusieurs objectifs liés à elle. Si une phase de construction n'a pas d'objectifs liés à elle, elle ne s'exécutera pas. Mais si un ou plusieurs objectifs lui sont liés, elle exécutera tous ces objectifs.

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

Architecture Maven :

enter image description here

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

Exemple d'Eclipse pour Maven Lifecycle Mapping

Eclipse sample for Maven Lifecycle Mapping

0 votes

Si j'ai 2 profils, puis-je exécuter tous les plugins du profil 1 d'abord, et ensuite ceux du profil 2 ?

0 votes

[plugin-name] dans l'exemple mvn [plugin-name]:[goal-name] est plutôt un Préfixe de plugin . mvn clean install peut non seulement " être utilisé dans un scénario multi-modules ". Le multi-module est un sujet totalement différent.

0 votes

Les objectifs rattachés à une même phase obéissent-ils à un ordre quelconque ?

52voto

Stas S Points 80

La réponse choisie est excellente, mais je voudrais tout de même ajouter un petit quelque chose au sujet. Une illustration.

Il montre clairement comment les différentes phases sont liées à différents plugins et les objectifs que ces plugins exposent.

Examinons donc le cas d'une exécution de quelque chose comme mvn compile :

  • C'est un phase qui exécutent le compilateur plugin avec compiler objectif
  • Le plugin du compilateur a des objectifs différents. Pour mvn compile il est associé à un objectif spécifique, l'objectif de compilation.
  • C'est la même chose que de courir mvn compiler:compile

Par conséquent, La phase est composée d'objectifs de plugins .

enter image description here

Lien vers le référence

23 votes

Pourquoi mvn test pointant vers package y mvn install pointant vers deploy ?

2 votes

Il s'agit d'une erreur d'illustration, merci de l'avoir remarquée (fondée dans le web).

4 votes

D'où vient l'illustration ? Avez-vous vérifié les droits d'auteur et les conditions d'utilisation ?

51voto

Sandeep Jindal Points 1813

Les définitions sont détaillées à l Page du site Maven Introduction au cycle de vie de la construction mais j'ai essayé de résumer :

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

  1. Cycle de vie

    Trois cycles de vie intégrés (alias les cycles de vie de la construction ) : default , clean , site . ( Référence au cycle de vie )

  2. Phase

    Chaque cycle de vie est composé de phases par exemple pour le default cycle de vie : compile , test , package , install etc.

  3. Plugin

    Un artefact qui fournit un ou plusieurs objectifs.

    En fonction du type d'emballage ( jar , war etc.) les objectifs des plugins sont liés aux phases par défaut. ( Liaisons intégrées du cycle de vie )

  4. Objectif

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

    Un ou plusieurs objectifs doivent être spécifiés lorsque configurer un plugin dans un POM . De plus, dans le cas où un plugin n'a pas de phase par défaut définie, le ou les objectifs spécifiés peuvent être liés à une phase.

Maven peut être invoqué avec :

  1. une phase (par exemple clean , package )
  2. <plugin-prefix>:<goal> (par exemple dependency:copy-dependencies )
  3. <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal> (par exemple org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile )

avec une ou plusieurs combinaisons de tout ou partie, par exemple :

mvn clean dependency:copy-dependencies package

0 votes

Seulement les phases du cycle de vie ont vraiment du sens pour être considérés comme "étapes" (d'un processus de construction). Je préfère l'appeler 4 entités/articles/choses .

0 votes

Quand je vois le monde Build Phase Pour moi, c'est une autre phase du cycle de vie, et cela me perturbe.

1 votes

Excellente réponse. Une petite note : Concernant la dernière section "Maven peut être invoqué avec" il y a une quatrième option (depuis Maven 3.3.1) qui est plugin:goal@execution_id par exemple mvn antrun:run@mon-exécution voir stackoverflow.com/questions/3166538/

32voto

Lior Bar-On Points 169

Je pense qu'une bonne réponse est déjà fournie, mais je voudrais ajouter un diagramme facile à suivre des différents 3 cycles de vie ( build , clean et site ) et les phases de chacune.

enter image description here

Les phases en gras - sont les principales phases couramment utilisées.

4 votes

generate-resources apparaît deux fois et generate-sources est manquant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X