¿Cuál es la diferencia entre "mvn deploy" en un repositorio local y "mvn install"?

95

Mi equipo utiliza un repositorio de maven de equipo interno que se comparte desde un servidor de desarrollo mediante Apache. También ejecutamos el servidor Continuum CI en la misma máquina. Las compilaciones de Maven en Continuum se ejecutan con el objetivo de "instalar", que copia el artefacto final directamente en el directorio compartido.

La pregunta es, ¿cuál es la diferencia entre agregar archivos al repositorio compartido usando mvn instally usar el objetivo de implementación (complemento mvn-deploy)?

Me parece que el uso mvn deploycrea problemas de configuración adicionales, pero he leído en alguna parte que instalar archivos en un repositorio compartido es una mala idea por alguna razón relacionada con el funcionamiento interno de maven.

actualización: obtengo las diferencias funcionales entre deployy install; De hecho, estoy más interesado en los detalles de bajo nivel en términos de qué archivos se crean en el repositorio de maven.

Ken Liu
fuente

Respuestas:

166

Ken, buena pregunta. Debería ser más explícito en la Guía Definitiva sobre la diferencia. "instalar" y "implementar" sirven para dos propósitos diferentes en una compilación. "instalar" se refiere al proceso de instalación de un artefacto en su repositorio local. "implementar" se refiere al proceso de implementar un artefacto en un repositorio remoto.

Ejemplo:

  1. Cuando ejecuto un proyecto grande de varios módulos en mi máquina, normalmente ejecutaré "mvn install". Esto instalará todos los artefactos de software binarios generados (generalmente JAR) en mi repositorio local. Luego, cuando construya módulos individuales en la compilación, Maven recuperará las dependencias del repositorio local.

  2. Cuando llegue el momento de implementar instantáneas o versiones, ejecutaré "mvn deploy". Ejecutar esto intentará implementar los archivos en un repositorio o servidor remoto. Por lo general, lo implementaré en un administrador de repositorio como Nexus.

Es cierto que ejecutar "deploy" requerirá alguna configuración adicional, tendrá que proporcionar una sección de DistributionManagement en su POM.

Tim O'Brien
fuente
@Tim, entonces, ¿cuál es exactamente la ventaja mvn deploy? ¿Qué beneficios ofrece para la configuración adicional que se requería en primer lugar?
Geek
4
Deploy está diseñado para implementar artefactos en un servidor remoto. Es un caso de uso completamente diferente al de install.
Tim O'Brien
17

De los documentos de Maven , parece que es solo una diferencia en el repositorio en el que instala el paquete:

  • instalar: instala el paquete en el repositorio local, para usarlo como una dependencia en otros proyectos localmente
  • Implementar: hecho en un entorno de integración o lanzamiento, copia el paquete final en el repositorio remoto para compartirlo con otros desarrolladores y proyectos.

Tal vez haya alguna confusión en que "instalar" en el servidor de CI lo instala en su repositorio local, que luego usted como usuario está compartiendo.

mate b
fuente
4

"matt b" tiene razón, pero para ser específico, el objetivo de "instalar" copia su objetivo construido en el repositorio local en su sistema de archivos; útil para pequeños cambios en proyectos que actualmente no están destinados a todo el grupo.

El objetivo de "implementar" lo sube a su repositorio compartido para cuando su trabajo esté terminado, y luego puede ser compartido por otras personas que lo requieran para su proyecto.

En su caso, parece que "instalar" se utiliza para facilitar la gestión de la implementación, ya que el repositorio local de CI es el repositorio compartido. Si CI estuviera en otro cuadro, tendría que usar el objetivo "implementar".

Spencer Kormos
fuente