Quelle est la différence entre «mvn deploy» vers un dépôt local et «mvn install»?

95

Mon équipe utilise un référentiel maven d'équipe interne qui est partagé à partir d'un serveur de développement utilisant Apache. Nous exécutons également le serveur Continuum CI sur la même machine. Les builds de Maven dans Continuum sont exécutés avec l'objectif «installer», qui copie l'artefact final directement dans le répertoire partagé.

La question est: quelle est la différence entre l'ajout de fichiers au mvn installréférentiel partagé à l'aide et l'utilisation de l'objectif de déploiement (plugin mvn-deploy)?

Il me semble que l'utilisation mvn deploycrée des problèmes de configuration supplémentaires, mais j'ai lu quelque part que l'installation de fichiers dans un référentiel partagé est une mauvaise idée pour une raison liée au fonctionnement interne de maven.

mise à jour: j'obtiens les différences fonctionnelles entre deployet install; Je suis en fait plus intéressé par les détails de bas niveau en termes de quels fichiers sont créés dans le repo maven.

Ken Liu
la source

Réponses:

166

Ken, bonne question. Je devrais être plus explicite dans le Guide définitif sur la différence. «installer» et «déployer» ont deux objectifs différents dans une construction. «installer» fait référence au processus d'installation d'un artefact dans votre référentiel local. «déployer» fait référence au processus de déploiement d'un artefact dans un référentiel distant.

Exemple:

  1. Lorsque j'exécute un grand projet multi-module sur ma machine, je vais généralement lancer "mvn install". Cela va installer tous les artefacts logiciels binaires générés (généralement des JAR) dans mon référentiel local. Ensuite, lorsque je construis des modules individuels dans la construction, Maven va récupérer les dépendances du référentiel local.

  2. Quand vient le temps de déployer des instantanés ou des versions, je vais lancer "mvn deploy". L'exécution de cette opération tentera de déployer les fichiers sur un référentiel ou un serveur distant. Habituellement, je vais déployer sur un gestionnaire de référentiel tel que Nexus

Il est vrai que l'exécution de "deploy" va nécessiter une configuration supplémentaire, vous allez devoir fournir une section distributionManagement dans votre POM.

Tim O'Brien
la source
@Tim alors quel est exactement l'avantage mvn deploy? Quels avantages cela apporte-t-il pour la configuration supplémentaire requise au départ?
Geek
4
Deploy est conçu pour déployer des artefacts sur un serveur distant. Il s'agit d'un cas d'utilisation totalement différent de l'installation.
Tim O'Brien
17

D'après les documents Maven , il semble que ce ne soit qu'une différence dans le référentiel dans lequel vous installez le package:

  • install - installe le package dans le référentiel local, pour une utilisation en tant que dépendance dans d'autres projets localement
  • deploy - effectué dans un environnement d'intégration ou de version, copie le package final dans le référentiel distant pour le partager avec d'autres développeurs et projets.

Peut-être qu'il y a une certaine confusion dans le fait que "installer" sur le serveur CI l'installe dans son référentiel local, que vous partagez alors en tant qu'utilisateur?

mat b
la source
4

"matt b" a raison, mais pour être précis, l'objectif "installer" copie votre cible construite dans le référentiel local de votre système de fichiers; utile pour les petits changements dans les projets qui ne sont actuellement pas destinés à l'ensemble du groupe.

L'objectif «déployer» le télécharge dans votre référentiel partagé lorsque votre travail est terminé, puis peut être partagé par d'autres personnes qui en ont besoin pour leur projet.

Dans votre cas, il semble que « install » est utilisé pour rendre la gestion du déploiement plus facile depuis repo local de CI est la prise en pension partagée. Si CI était sur une autre boîte, il devrait utiliser l'objectif «déployer».

Spencer Kormos
la source