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

Quelle est la différence/la relation entre Maven objectifs et phases? La façon dont ils sont liés les uns aux autres?

228
demandé sur Tunaki 2013-04-25 07:16:23
la source

8 ответов

objectifs sont exécutés dans les phases qui aident à déterminer les objectifs de l'ordre sont exécutés. La meilleure compréhension de ceci est de regarder le Fixations de cycle de vie par défaut Maven qui montre quels objectifs sont exécutés dans quelles phases par défaut. Les objectifs de la phase de compilation seront toujours exécutés avant les objectifs de la phase de test qui seront toujours exécutés avant les objectifs de la phase du paquet 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 but ou une phase. Si vous spécifiez une phase, maven exécutera toutes les phases jusqu'à la phase que vous spécifiez dans l'ordre (Par exemple, si vous spécifiez un paquet, il passera d'abord par la phase de compilation, puis la phase de test et enfin la phase de paquet) et pour chaque phase il exécutera tous les objectifs attachés à cette phase.

quand vous créez une exécution de plugin dans votre fichier Maven build et que vous spécifiez seulement le but, alors il liera ce but à un donné la phase par défaut. Par exemple, l'objectif jaxb:xjc se lie par défaut à la phase generate-resources. Toutefois, lorsque vous spécifiez l'exécution, vous pouvez également spécifier explicitement la phase de cet objectif.

si vous spécifiez un but lorsque vous exécutez Maven, alors il exécutera toutes les phases jusqu'à la phase pour ce but. En d'autres termes, si vous spécifiez le but jar il exécutera toutes les phases jusqu'à la phase de paquet (et tous les buts dans ces phases), et puis il exécutera le jar objectif.

184
répondu Pace 2014-11-08 22:33:00
la source

cycle de vie est une séquence de phases .

Les Phases s'exécutent de façon séquentielle. Exécuter une phase signifie exécuter toutes les phases précédentes.

Plugin est une collection de objectifs également appelé MOJO ( M aven O ld J ava O bject).

Analogie: le Plugin est une classe et les objectifs sont des méthodes au sein de la classe.

Maven est basé sur le concept central d'un cycle de vie de construction.

Il existe trois cycles de vie encastrés:

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

chaque cycle de construction est composé des Phases

par exemple, le cycle de vie default comprend les 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.

donc pour passer par les phases ci-dessus, nous avons juste à appeler une commande:

mvn <phase> { 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 d'installation. mvn peut soit exécuter un but ou une phase (ou même plusieurs buts ou plusieurs phases) comme suit:

mvn clean install plugin:goal  

cependant, si vous voulez personnaliser le préfixe utilisé pour référencer votre plugin, vous pouvez spécifier le préfixe directement à travers un paramètre de configuration sur le maven-plugin-plugin dans votre POM du plugin.

une phase de construction se compose de Plugin objectifs

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

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

par exemple, un projet Java peut être compilé avec le but de compilation du compilateur-plugin en exécutant mvn compiler:compile .

Build lifecycle est une liste de phases nommées qui peuvent être utilisées pour donner l'ordre à l'exécution des objectifs.

objectifs fournis par les plugins peut être associé à 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

quand la commande précédente est exécutée, Maven exécute tous les buts associé à chacune des phases jusqu'à la phase test incluse. Dans un tel cas, Maven exécute le but resources:resources associé à la phase process-resources , puis compiler:compile , et ainsi de suite jusqu'à ce qu'il exécute finalement le but 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 façon 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 but 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 pourrait être exécuté en dehors du cycle de vie de la 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 clean et package arguments sont des phases de construction, tandis que le dependency:copy-dependencies est un but (d'un plugin).

mvn clean dependency:copy-dependencies package

si cela devait être exécuté, la phase 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 clean elle-même), puis l'objectif dependency:copy-dependencies , avant d'enfin exécuter la phase package (et toutes ses phases de construction précédentes du cycle de vie par défaut).

En outre, si un but est lié à une ou plusieurs phases de construction, l'objectif sera appelée dans toutes ces phases.

en outre, une phase de construction peut également avoir zéro ou plus objectifs liés à elle. Si une phase de construction n'a aucun objectif lié à elle, cette phase de construction ne sera pas exécutée. Mais si elle a un ou plusieurs objectifs liés à lui, il va exécuter tous ces buts.

reliures 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 reliures dépendent de la valeur de l'emballage.

Maven Architecture:

enter image description here

Référence 1

Référence 2

141
répondu Premraj 2018-02-04 07:51:44
la source

la réponse choisie est grande, mais je voudrais quand même ajouter quelque chose de petit au sujet. Illustration.

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

donc, examinons un cas d'exécution de quelque chose comme mvn compile :

  • C'est une phase qui exécute le compilateur plugin avec la compilation objectif
  • plugin de compilateur a obtenu différents objectifs. Pour mvn compile c'est mappé à un but spécifique, le but de compilation.
  • c'est la même chose que mvn compiler:compile

par conséquent, phase est constituée de buts de plugin .

enter image description here

lien vers le référence

35
répondu Stas 2017-04-08 14:24:57
la source

les définitions sont détaillées à la page du site de Maven Introduction to the Build Lifecycle , 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 cycles de vie intégrés ): default , clean , site . ( Cycle De Vie De Référence )

  2. Phase

    chaque cycle de vie est composé de phases , p.ex. pour le default cycle de vie: compile , test , package , install , etc.

  3. Plugin

    Un artefact qui fournit un ou plusieurs objectifs.

    sur la base du type d'emballage ( jar , war , etc. plugins les objectifs sont liés à des phases par défaut. ( liaisons intégrées du cycle de vie )

  4. Objectif

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

    un ou plusieurs objectifs doivent à préciser quand configurer un plugin dans un POM . En outre, dans le cas d'un plugin n'a pas un défaut de phase défini, le but spécifié(s) peut être lié à une phase.

Maven peut être invoqué avec:

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

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

mvn clean dependency:copy-dependencies package
32
répondu Sandeep Jindal 2018-02-04 16:48:30
la source

crédit à Sandeep Jindal et Premraj. Leur explication m'aide à comprendre après avoir confondu à ce sujet pendant un certain temps.

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 du lien, vous ne devriez pas essayer de comprendre les trois à la fois, d'abord vous devriez comprendre la relation de ces groupes:

  • cycle de vie vs Phase
  • Plugin vs Goal

1. Cycle de vie vs Phase

Cycle de Vie est une collection de phase dans la séquence de voir ici "1519270920 du Cycle de Vie" Références . Quand vous appelez un phase , il appellera aussi tous phase avant elle.

Par exemple, le propre cycle de vie a 3 phases ( pré-propre, propre, post-propre ).

mvn clean

il appellera pre-clean et clean .

2. Plugin vs Objectif

Objectif , c'est comme une action en Plugin . Donc, si le plugin est une classe, l'objectif est une méthode.

vous pouvez appeler un objectif similaire:

mvn clean:clean

cela signifie" appeler le but propre, dans le plugin propre " (rien ne se rapporte à la phase propre ici. Ne laissez pas le mot"propre" vous confondre, ils ne sont pas les mêmes!)

3. Maintenant la relation entre Phase & but:

Phase peut (pré)les liens Objectif (s).Par exemple, normalement, la phase propre est liée à l'objectif propre. Donc, quand vous appelez cette commande:

mvn clean

il appellera la phase de pré-nettoyage et la phase de nettoyage qui est liée à l'objectif de nettoyage.

il est presque le même 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 /

5
répondu Surasin Tancharoen 2017-12-13 01:29:44
la source

Maven de travail de la terminologie ayant phases et objectifs.

Phase: Maven phase est un ensemble d'action qui est associé à 2 ou 3 objectifs

exemple:- si vous exécuter mvn clean

c'est la phase d'exécuter le but mvn clean:nettoyage

Objectif:Maven objectif délimité par la phase

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

1
répondu Venky Vungarala 2014-09-16 13:33:27
la source

il y a trois cycles de vie encastrés suivants:

  • par défaut
  • propre
  • site

Cycle de vie par défaut -> [valider, d'initialiser, de générer des sources, des sources, de générer des ressources, des processus de ressources, de compiler, de processus de classes, de générer des essais sources, processus de test-sources, de générer des essais de ressources, de processus de test, test-compile, processus d'examen des classes, test, préparez-paquet, paquet, pre-integration-test, intégration-test, post-integration-test, vérifier, installer, déployer]

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

Cycle de vie du site -> [pré-site, site après site,-déployer]

Le flux est séquentiel, par exemple, pour par défaut cycle de vie, il commence par valider , puis initialiser et ainsi de suite...

vous pouvez vérifier le cycle de vie en activant le mode de débogage de mvn i.e., mvn -X <your_goal>

1
répondu Vishrant 2018-08-14 22:05:34
la source

je crois 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 dans chacun.

enter image description here

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

0
répondu Lior Bar-On 2018-10-01 09:43:39
la source

Autres questions sur