269 votes

En quoi "mvn clean install" est-il différent de "mvn install" ?

Quelle est la différence entre mvn clean install y mvn install ?

278voto

Powerlord Points 43989

clean est sa propre phase du cycle de vie de construction (qui peut être considérée comme une action ou une tâche) dans Maven. mvn clean install indique à Maven de faire le clean dans chaque module avant d'exécuter le install pour chaque module.

Cela permet d'effacer tous les fichiers compilés que vous avez, en vous assurant que vous compilez réellement chaque module à partir de zéro.

22 votes

J'ai toujours pensé qu'installer incluant le nettoyage comme une de ses phases... jusqu'à ce que je voie ceci

20 votes

@shanyangqu Malheureusement, non. clean est dans un cycle de vie distinct Il n'est donc pas appelé par défaut.

1 votes

1. Re " peut être considéré comme une action ou une tâche " : Les phases Maven ne sont pas actions o tâches . S'il n'y a pas d'objectif de plugin lié à une phase, ni une action ni une tâche, soit rien est fait. Une phase est plus une étape ou un stade . 2. Re " faire le clean phase " : Avec mvn clean il passe le pre-clean y el clean phase de la clean cycle de vie et exécute les objectifs des plugins liés à chaque phase. 3. Re " effacer tous les fichiers compilés " : Non seulement ceux-là, mais tout ce qui réside sous ${project.build.directory} : <artifact>.jar , ressources, dossiers, etc.

61voto

Sean Patrick Floyd Points 109428

Maven vous permet de spécifier soit les objectifs, soit les phases du cycle de vie sur la ligne de commande (ou les deux).

clean y install sont deux phases différentes de deux cycles de vie différents à laquelle les différents objectifs des plugins sont liés (soit par défaut, soit par explicitement dans votre pom.xml )

Le site clean par convention, est destinée à rendre une construction reproductible, c'est-à-dire qu'elle nettoie tout ce qui a été créé par les constructions précédentes. Dans la plupart des cas, elle le fait en appelant clean:clean qui supprime le répertoire lié à ${project.build.directory} (généralement appelé "cible")

7 votes

"Installer" n'est pas un cycle de vie. C'est une phase du cycle de vie par défaut. Bien qu'il existe un cycle de vie "clean", ce paramètre spécifie la phase "clean" du cycle de vie "clean", et non le cycle de vie "clean" lui-même.

1 votes

@Puce vrai, je voulais dire "Phase", pas cycle de vie

0 votes

Il y a en fait 4 éléments nommés clean : le cycle de vie et l'une de ses phases ; la Préfixe de plugin du Maven Clean Plugin et l'un de ses objectifs.

44voto

Andreas_D Points 64111

Vous pouvez appeler plus d'une objetivo objectif avec maven. mvn clean install appelle clean d'abord, puis install . Vous devez nettoyer manuellement, car le nettoyage n'est pas une norme. objetivo et non exécuté automatiquement à chaque installation.

clean supprime le dossier cible - il supprime tous les fichiers de classe, la documentation java, les jars, les rapports, etc. Si vous ne clean alors maven ne fera que "ce qui doit être fait", comme il ne compilera pas les classes lorsque les fichiers sources correspondants n'ont pas changé (en bref).

nous l'appelons objetivo dans la fourmi et objectif dans maven

3 votes

Je pense que dans ce contexte, nettoyer et installer sont des phases du cycle de vie, pas des objectifs.

1 votes

Je suis tout à fait d'accord avec @JL_SO

0 votes

clean n'a pas supprimer le site target dossier. Il s'agit de nettoie ça. Ce n'est pas non plus nécessairement le dossier nommé target mais celle définie par ${project.build.directory} .

31voto

Puce Points 13540

Pour s'en tenir aux termes de Maven :

  • "nettoyer" est une phase du cycle de vie cycle de vie
  • "installer" est une phase du cycle de vie par défaut

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

0 votes

Il y a en fait quatre éléments nommés clean : clean cycle de vie avec son clean phase, clean préfixe pour le maven-clean-plugin avec son clean but. Voir également le commentaire sur cette réponse à Maven : Cycle de vie vs. phase vs. plugin vs. objectif .

0 votes

Vrai, mais propre dans mvn clean install fait référence à la phase.

1 votes

Oui, c'est le cas. Mon commentaire ne se voulait pas une critique mais une information supplémentaire pour tous les futurs lecteurs et chercheurs ici.

7voto

mezmo Points 1678

Idem pour @Andreas_D, de plus si vous dites mettre à jour Spring d'une version à une autre dans votre projet sans faire un nettoyage, vous vous retrouverez avec les deux dans votre artefact. J'ai rencontré ce problème à plusieurs reprises lors du développement de Flex avec Maven.

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