2008-10-16 13 views
80

Mi equipo usa un repositorio maven interno del equipo que se comparte desde un servidor de desarrollo usando Apache. También ejecutamos el servidor de Continuum CI en la misma máquina. Las compilaciones de Maven en Continuum se ejecutan con el objetivo de "instalación", que copia el artefacto final directamente en el directorio compartido.¿Cuál es la diferencia entre "mvn deploy" en un repositorio local y "mvn install"?

La pregunta es, ¿cuál es la diferencia entre agregar archivos al repositorio compartido usando mvn install y usar el objetivo de despliegue (plugin mvn-deploy)?

Me parece que usar mvn deploy crea problemas de configuración adicionales, pero he leído en alguna parte que la instalación de archivos en un repositorio compartido es una mala idea por algún motivo relacionado con el funcionamiento interno de maven.

actualización: obtengo las diferencias funcionales entre implementar e instalar; En realidad, estoy más interesado en los detalles de bajo nivel en términos de qué archivos se crean en el repositorio maven.

Respuesta

144

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

Ejemplo:

  1. Cuando ejecuto un proyecto de gran multi-módulo en una máquina de mi, voy a correr por lo general "mvn instalar". Esto va a instalar todos los artefactos de software binario generados (generalmente JAR) en mi repositorio local. Luego, cuando construyo módulos individuales en la compilación, Maven recuperará las dependencias del repositorio local.

  2. Cuando llega el momento de implementar instantáneas o lanzamientos, voy a ejecutar "mvn deploy". Al ejecutar esto, intentará implementar los archivos en un repositorio o servidor remoto.Por lo general, voy a ser el despliegue de un administrador de repositorio como Nexus

Es cierto que la ejecución de "desplegar" va a requerir alguna configuración adicional, se le va a tener que suministrar una sección en su distributionManagement POM.

+0

@Tim, ¿cuál es exactamente la ventaja de 'mvn deploy'? ¿Qué beneficios ofrece la configuración adicional que se requería en primer lugar? – Geek

+2

La implementación está diseñada para implementar artefactos en un servidor remoto. Es un caso de uso completamente diferente de la instalación. –

13

From the Maven docs, suena como que es sólo una diferencia en cuales repositorio de instalar el paquete en:

  • instalar - instalar el paquete en el repositorio local, para su uso como una dependencia en otros proyectos a nivel local
  • Implementación de
  • : realizada en un entorno de integración o versión, copia el paquete final en el repositorio remoto para compartirlo con otros desarrolladores y proyectos.

Quizás haya alguna confusión en el sentido de que la "instalación" en el servidor de CI la instala en su repositorio local, que luego usted como usuario está compartiendo?

3

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

El objetivo de "implementación" lo carga en su repositorio compartido para cuando finalice su trabajo, y luego puede ser compartido por otras personas que lo necesiten para su proyecto.

En su caso, parece que la "instalación" se utiliza para facilitar la administración de la implementación, ya que el repos local de CI es el repositorio compartido. Si CI estuviera en otra casilla, debería usar el objetivo de "implementación".

Cuestiones relacionadas