2009-10-09 12 views
22

Nota: Esta pregunta fue originalmente publicada por Lahiru Gunathilake como answer en otra question. Lo estoy moviendo aquí como una pregunta separada por el bien de la claridad.Si ejecuto mvn deploy, ¿crea artefactos nuevos o simplemente implementa los artefactos ya existentes en el servidor remoto?

Cuando estamos haciendo un lanzamiento, simplemente construimos en nuestra máquina local y hacemos el control de calidad y luego lo recibimos en el repositorio. Si ejecutamos mvn deploy, crea nuevos artefactos, esto causa tener diferentes artefactos en el repositorio y en la distribución binaria porque estamos creando la distribución binaria desde nuestro repositorio local. Pero si alguien obtiene el código fuente y hace la construcción, obtendrá una diferente. Pero si mvn deploy no se compila pero solo se implementa, está bien.

Respuesta

27

Como se explica en Build Lifecycle Basics:

un ciclo de vida Build se compone de Fases

Cada uno de estos construir ciclos de vida se define por una lista diferente de fases de construcción, en el que una fase de construcción representa un etapa en el ciclo de vida.

Por ejemplo, el ciclo de vida por defecto tiene la siguiente construcción de fases (para una lista completa de las fases de construcción, consulte la Lifecycle Reference):

  • validate - validar el proyecto es correcta y toda la información necesaria está disponible
  • compile - compilar el código fuente del proyecto
  • test - probar el código fuente compilado usando un marco de pruebas de unidad adecuada. Estas pruebas no deben requerir el código empaquetado o implementado
  • package - tome el código compilado y empaquételo en su formato distribuible, como un JAR.
  • integration-test - proceso e implementar el paquete si es necesario en un entorno donde las pruebas de integración se pueden ejecutar
  • verify - realizará comprobaciones para verificar el paquete es válido y cumple con los criterios de calidad
  • install - instalar el paquete en el local de repositorio, para usar como una dependencia en otros proyectos localmente
  • deploy - hecho en un entorno de integración o lanzamiento, copia el paquete final en el repositorio remoto para compartirlo con otros desarrolladores y proyectos.

Estas fases de compilación (más las otras fases de compilación que no se muestran aquí) se ejecutan secuencialmente para completar el ciclo de vida predeterminado. Dadas las fases de compilación anteriores, esto significa que cuando se utiliza el ciclo de vida predeterminado, Maven primero validará el proyecto, luego intentará compilar las fuentes, ejecutarlas contra las pruebas, empaquetar los binarios (por ejemplo, jar), ejecutar pruebas de integración contra ese paquete, verifique el paquete, instale el paquete verifed en el repositorio local, luego despliegue el paquete instalado en un entorno específico.

de hacer todas esas, sólo tiene que llamar a la última fase de construcción a ejecutar, en este caso, desplegar:

mvn deploy 

Eso es porque si se llama a una fase de construcción, se ejecutará no sólo esa fase de construcción, pero también cada fase de construcción anterior a la fase de construcción llamada.

Por lo tanto, la respuesta es sí, mvn deploy ejecutará install y construir los artefactos del proyecto. Pero si no cambias nada, esto producirá exactamente el mismo artefacto.

Cuestiones relacionadas