¿En qué se diferencian "mvn clean package" y "mvn clean install"?

277

¿Cuáles son exactamente las diferencias entre mvn clean packagey mvn clean install? Cuando ejecuto estos dos comandos, ambos parecen hacer lo mismo.

Ben
fuente
12
Consulte Introducción al ciclo de vida de la construcción: referencia del ciclo de vida y busque packagey install.
Charlee Chitsuk
3
Un paquete (lo construye en el destino) y en las instalaciones (lo empaqueta y lo coloca en su repositorio). Debe hacer lo posterior si desea utilizar esta versión en otro módulo.
Peter Lawrey
3
Quizás esto debería ser reabierto? Es perfectamente posible responder y no me resultó difícil responder. Además, si alguien es nuevo en Maven, es fácil ver cómo las dos fases parecen hacer lo mismo. Lo editaré en un intento de hacerlo menos vago.
Daniel Kaplan

Respuestas:

371

Bueno, ambos limpiarán. Eso significa que eliminarán la carpeta de destino. La verdadera pregunta es ¿cuál es la diferencia entre paquete e instalación?

packagecompilará su código y también lo empaquetará. Por ejemplo, si su pom dice que el proyecto es un jar, creará un jar para usted cuando lo empaquete y lo coloque en algún lugar del directorio de destino (de forma predeterminada).

installcompilará y empaquetará, pero también colocará el paquete en su repositorio local. Esto hará que otros proyectos puedan consultarlo y obtenerlo de su repositorio local.

Documentación

Daniel Kaplan
fuente
¿Por qué mvn se instala más rápido que el paquete mvn?
lostintranslation
9
@SharadHolani porque las compilaciones son incrementales. mvn clean installNo es más rápido que mvn package.
OrangeDog
Para mi proyecto, el ensamblaje del paquete mvn: single que construye el tarro gordo lleva más tiempo que una instalación mvn. ¿Empaquetar e instalar ambos construir tarros de grasa equivalentes?
lostintranslation
1
@RakeshYadav sí, lo hace
Daniel Kaplan
116

Qué limpieza hace (común en ambos comandos): elimina todos los archivos generados por la compilación anterior


Para llegar a la diferencia entre el paquete de comandos y la instalación , primero debe comprender el ciclo de vida de un proyecto maven


Estas son las fases predeterminadas del ciclo de vida en maven

  • validar : validar que el proyecto es correcto y toda la información necesaria está disponible
  • compilar : compila el código fuente del proyecto
  • prueba : prueba el código fuente compilado utilizando un marco de prueba de unidad adecuado. Estas pruebas no deberían requerir que el código se empaquete o implemente
  • paquete : tome el código compilado y empaquételo en su formato distribuible, como un JAR.
  • verificar : ejecutar cualquier verificación de los resultados de las pruebas de integración para garantizar que se cumplan los criterios de calidad
  • instalar : instala el paquete en el repositorio local, para usarlo como dependencia en otros proyectos localmente
  • despliegue : hecho en el entorno de compilación, copia el paquete final en el repositorio remoto para compartirlo con otros desarrolladores y proyectos.

El funcionamiento de Maven es que, si ejecuta un comando para cualquiera de las fases del ciclo de vida, ejecuta cada fase predeterminada del ciclo de vida en orden, antes de ejecutar el comando en sí.

orden de ejecución

validar >> compilar >> prueba (opcional) >> paquete >> verificar >> instalar >> desplegar

Entonces, cuando ejecuta el comando mvn package , ejecuta los comandos para todas las fases del ciclo de vida hasta el paquete

validar >> compilar >> prueba (opcional) >> paquete

Y en cuanto a mvn install , ejecuta los comandos para todas las fases del ciclo de vida hasta la instalación, que también incluye el paquete

validar >> compilar >> prueba (opcional) >> paquete >> verificar >> instalar


Entonces, efectivamente, lo que significa es que los comandos de instalación hacen todo lo que hace el comando del paquete y algo más (instale el paquete en el repositorio local, para usarlo como dependencia en otros proyectos localmente)

Fuente: referencia del ciclo de vida de Maven

Ketan R
fuente
1
Esto debe marcarse como respuesta aceptada. Esto define claramente y ayuda al OP a comprender cuáles son las diferentes fases del ciclo de vida de Maven y por qué mvn install incluye mvn package pero no al revés.
Jasmeet Singh
1
Maven en pocas palabras, ¡genial!
CodeSlave
19

el paquete generará Jar / war según el archivo POM. install instalará el archivo jar generado en el repositorio local para otras dependencias, si las hay.

la fase de instalación viene después de la fase del paquete

Abdul Gafoor
fuente
primero se realizará el empaque y luego se instalarán esos paquetes (jar / war).
Abdul Gafoor
1
"La fase de instalación sigue a la fase del paquete". La forma en que está redactada actualmente es al revés. "Seguido por" significa "después".
Charles Wood
11

Empaquetar e instalar son varias fases en el ciclo de vida de construcción de Maven. la fase de paquete ejecutará todas las fases antes de eso y se detendrá con el empaquetado del proyecto como un frasco. Del mismo modo, la fase de instalación ejecutará todas las fases anteriores y finalmente instalará el proyecto localmente para otros proyectos dependientes.

Para comprender el ciclo de vida de la construcción de Maven, visite el siguiente enlace https://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html

Aarish Ramesh
fuente
1
¿Qué quieres decir con "y finalmente instalar el proyecto localmente para otros proyectos dependientes"
Arun Gowda
2
@ArunGowda significa que en el .m2 que se crea en su sistema al instalar el maven se agregará con los proyectos que está empaquetando y estará disponible para otros proyectos como dependencia.
JAVA
una imagen son 1000 palabras, ¿alguien tiene un diagrama?
@MrCholo mvn install colocará el jar / war en tu repositorio maven. El lugar donde se almacenan todas sus dependencias de Maven, generalmente ~ / .m2
brt
6

packageagregará empaquetado jaro wara su targetcarpeta, podemos verificarlo cuando, vaciemos la carpeta de destino (usando mvn clean) y luego la ejecutemos mvn package.
installhará todo lo que packagehace, además agregará paquetes jaro también waren el repositorio local. Podemos confirmarlo ingresando en su .m2carpeta.

Nisarg Patil
fuente