Installation Mvn ou package Mvn

134

Je suis nouveau sur Maven, j'ai un projet Web basé sur Java avec maven configuré dans mon MyEclipse.
Maintenant, si j'ai modifié des fichiers java, dois-je faire Run as -> Mvn installou Mvn package?

user2192023
la source

Réponses:

158

depuis http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

package: prenez le code compilé et empaquetez-le dans son format distribuable, tel qu'un JAR.

install: installez le package dans le référentiel local, pour l'utiliser comme dépendance dans d'autres projets localement

Donc, la réponse à votre question est, cela dépend si vous voulez qu'il soit installé dans votre dépôt local. Install exécutera également le package car il est plus haut dans la pile de phase d'objectif.

ezcodr
la source
J'ai un projet dans lequel je convertis le code du dossier principal et le code du dossier de test en Jar. Ensuite, je souhaite le déployer dans nexus afin qu'il puisse être utilisé par d'autres projets. Ma commande de déploiement est "mvn clean deploy -DskipTests". Puis-je créer ce package de commandes plutôt que de l'installer dans le référentiel local?
MasterJoe
@ MasterJoe2 "Ensuite, je veux déployer ceci dans nexus" C'est ce que deployfait. Si vous le remplacez par package, il ne sera pas déployé sur Nexus.
walen
37

mvn installest l'option la plus souvent utilisée.
mvn packageest rarement utilisé, uniquement si vous déboguez un problème avec le processus de construction maven.

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

Notez que mvn packagecela ne créera qu'un fichier jar.
mvn installfera cela et installera les fichiers jar (et class etc.) aux bons endroits si un autre code dépend de ces jars.

Je fais habituellement un mvn clean install; cela supprime le targetrépertoire et recrée tous les fichiers JAR à cet emplacement.
Le nettoyage aide avec les choses inutiles ou supprimées qui peuvent parfois gêner.
Plutôt que de déboguer (parfois), recommencez à zéro tout le temps.

Johan
la source
27
Je ne suis pas d'accord avec le fait que le package est rarement utilisé sur 2 points. 1) Il s'exécute à chaque fois que vous exécutez l'installation. 2) Si vous créez un fichier .war, le simple fait d'exécuter un package convient, car vous n'avez pas besoin d'une guerre dans votre dépôt local.
Joshua Wilson
5
La réponse n'explique pas, pourquoi préféreriez-vous installer dans le référentiel local. À ma connaissance, si les projets sont bien mis en place, alors le réacteur fournira les dépendances entre les modules. Si les projets ne sont pas correctement configurés, l'installation pourrait simplement masquer ce fait et utiliser les mauvais artefacts. Si vous avez des projets dépendants, qui doivent être construits séparément pour une raison quelconque, alors seulement voudriez-vous installer.
Vsevolod Golovanov
11

À partir de la référence du cycle de vie , l' installation exécutera les tests d'intégration du projet, contrairement au package .

Si vous ne devez vraiment pas installer les artefacts générés, utilisez au moins verify .

ADN
la source
5

Notez également que si votre projet est composé de plusieurs modules qui dépendent les uns des autres, vous devez utiliser "install" au lieu de "package", sinon votre build échouera, car lorsque vous utilisez la commande install, le module A sera empaqueté et déployé sur le référentiel local, puis si le module B a besoin du module A en tant que dépendance, il peut y accéder à partir du référentiel local.

Monsieur Q
la source
4

Si vous n'êtes pas à l' aide d' un distant dépôt (comme Artifactory), utilisez ancienne plaine: mvn clean install

Sujet assez ancien mais AFAIK, si vous exécutez votre propre référentiel (par exemple: avec artificiel) pour partager le fichier jar entre vos équipes, vous voudrez peut-être utiliser

mvn clean deploy

au lieu.

De cette façon, votre serveur d'intégration continue peut être sûr que toutes les dépendances sont correctement transférées dans votre référentiel distant. Si vous en avez manqué un, mvn ne pourra pas le trouver dans votre référentiel m2 local CI.

user1853859
la source
1
Je pense que vous parlez de mvn clean deploy, pas de mvn clean package
Mayjak
2

package - prend le code compilé et le conditionne dans son format distribuable, tel qu'un fichier JAR ou WAR. install - installe le package dans le référentiel local, pour l'utiliser comme dépendance dans d'autres projets localement

Elilmatha Sivanesan
la source
2

La bonne façon est que mvn packagesi vous avez fait les choses correctement pour la partie principale de votre build, il ne devrait pas être nécessaire d'installer vos paquets dans le référentiel local.

De plus si vous utilisez Travis vous pouvez "mettre en cache" vos dépendances car cela ne vous touchera pas $HOME.m2/repositorysi vous utilisez package pour votre propre projet.

En pratique, si vous essayez même de faire un, mvn sitevous devez généralement faire un mvn installavant. Il y a tout simplement trop de bogues avec l'un siteou l' autre des plugins mal entretenus.

Archimède Trajano
la source
0

Cela dépend de ce que vous essayez d'accomplir après avoir modifié le fichier Java. Tant que vous ne voulez pas tester le processus maven, vous n'avez rien à faire. Eclipse / MyEclipse construira ce qui est nécessaire et placera la sortie à l'endroit approprié dans votre projet. Vous pouvez également l'exécuter ou le déployer (s'il s'agit d'un projet Web, par exemple), sans que vous ayez à faire quoi que ce soit explicitement avec maven. En fin de compte, pour installer votre projet dans le référentiel maven, vous devrez faire une installation maven. Vous pouvez également avoir d'autres objectifs maven que vous souhaitez exécuter, ce que MyEclipse ne fera pas automatiquement.

Comme je l'ai dit, cela dépend de ce que vous voulez faire.

Tony Weddle
la source