Instalación de Mvn o paquete de Mvn

134

Soy nuevo en Maven, tengo un proyecto web basado en Java con Maven configurado en MyEclipse.
Ahora, si modifiqué algún archivo java, ¿debo hacer Run as -> Mvn installo Mvn package?

usuario2192023
fuente

Respuestas:

158

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

package: tome el código compilado y empaquételo en su formato distribuible, como un JAR.

install: instale el paquete en el repositorio local, para usarlo como dependencia en otros proyectos localmente

Entonces, la respuesta a su pregunta es, depende de si desea instalarlo en su repositorio local. Instalar también ejecutará el paquete porque está más arriba en la pila de la fase objetivo.

ezcodr
fuente
Tengo un proyecto donde estoy convirtiendo el código de la carpeta principal y el código de la carpeta de prueba en Jar. Entonces, quiero implementar esto en nexus para que pueda ser utilizado por otros proyectos. Mi comando de despliegue es "mvn clean deploy -DskipTests". ¿Puedo hacer este paquete de comandos, en lugar de instalarlo en el repositorio local?
MasterJoe
@ MasterJoe2 "Entonces, quiero implementar esto en nexus" Eso es lo que deployhace. Si lo reemplaza con package, no se implementará en Nexus.
walen
37

mvn installes la opción que se usa con más frecuencia.
mvn packagerara vez se usa, solo si está depurando algún problema con el proceso de compilación de Maven.

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

Tenga en cuenta que mvn packagesolo creará un archivo jar.
mvn installhará eso e instalará los archivos jar (y clase, etc.) en los lugares adecuados si otro código depende de esos archivos jar.

Yo suelo hacer un mvn clean install; esto elimina el targetdirectorio y recrea todos los frascos en esa ubicación.
La limpieza ayuda con cosas innecesarias o eliminadas que a veces pueden interferir.
En lugar de depurar (algunas veces) simplemente comienza de nuevo todo el tiempo.

Johan
fuente
27
No estoy de acuerdo con que el paquete rara vez se usa en 2 puntos. 1) Se ejecuta cada vez que ejecutas la instalación. 2) Si está haciendo un .war, simplemente ejecutar el paquete está bien, ya que no necesita una guerra en su repositorio local.
Joshua Wilson
55
La respuesta no explica, ¿por qué preferiría instalar en el repositorio local? En mi opinión, si los proyectos se configuran correctamente, el reactor proporcionará las dependencias entre los módulos. Si los proyectos no están configurados correctamente, la instalación podría ocultar este hecho y utilizar los artefactos incorrectos. Si tiene proyectos dependientes, eso debe construirse por separado por alguna razón, solo entonces querría instalarlo.
Vsevolod Golovanov
11

Desde la referencia de Lifecycle , install ejecutará las pruebas de integración del proyecto, el paquete no.

Si realmente no necesita instalar los artefactos generados, use al menos verificar .

adn
fuente
5

También debe tener en cuenta que si su proyecto consta de varios módulos que dependen unos de otros, debe usar "instalar" en lugar de "paquete", de lo contrario su compilación fallará, porque cuando use el comando de instalación, el módulo A se empaquetará e implementado en el repositorio local y luego, si el módulo B necesita el módulo A como dependencia, puede acceder a él desde el repositorio local.

Mr.Q
fuente
4

Si está sin el uso de un mando a distancia repositorio (como Artifactory), utilizar el viejo y simple: mvn clean install

Tema bastante antiguo pero AFAIK, si ejecuta su propio repositorio (por ejemplo: con artefacto) para compartir jar entre su (s) equipo (s), es posible que desee utilizar

mvn clean deploy

en lugar.

De esta manera, su servidor de integración continua puede estar seguro de que todas las dependencias se insertan correctamente en su repositorio remoto. Si se perdió uno, mvn no podrá encontrarlo en su repositorio de m2 local de CI.

usuario1853859
fuente
1
Creo que estás hablando de mvn clean deploy, no mvn clean package
Mayjak
2

paquete: toma el código compilado y lo empaqueta en su formato distribuible, como un archivo JAR o WAR. instalar: instala el paquete en el repositorio local, para usarlo como dependencia en otros proyectos localmente

Elilmatha Sivanesan
fuente
2

La forma correcta esmvn package si hizo las cosas correctamente para la parte central de su compilación, entonces no debería ser necesario instalar sus paquetes en el repositorio local.

Además, si usa Travis, puede "almacenar en caché" sus dependencias porque no tocará su $HOME.m2/repository suyas si usa el paquete para su propio proyecto.

En la práctica, si incluso intentas hacer algo mvn site, generalmente debes hacer un mvn installantes. Hay demasiados errores con cualquiera siteo son numerosos complementos mal mantenidos.

Arquímedes Trajano
fuente
0

Depende de lo que intente lograr después de cambiar el archivo Java. Hasta que desee probar el proceso de Maven, nunca necesita hacer nada. Eclipse / MyEclipse creará lo que sea necesario y colocará la salida en el lugar apropiado dentro de su proyecto. También puede ejecutarlo o implementarlo (si es un proyecto web, por ejemplo), sin necesidad de hacer nada explícitamente con Maven. Al final, para instalar su proyecto en el repositorio de maven, deberá hacer una instalación de maven. También puede tener otros objetivos expertos que desee ejecutar, que MyEclipse no hará automáticamente.

Como digo, depende de lo que quieras hacer.

Tony Weddle
fuente