2012-06-24 11 views
10

Estoy construyendo un proyecto, que se compone de varios módulos (a veces no relacionados) y algunos más módulos java no estándar (construidos con ANT).Despliegue de Maven: forzando la implementación incluso si ya existe un artefacto

Cada módulo de maven se implementa en el depósito de lanzamientos al finalizar.

Si la construcción falla en el medio, es posible que tenga algunos módulos ya implementados, por lo que si intento reconstruir, el nuevo intento de implementación fallará debido a que los artefactos ya están desplegados.

¿Es posible forzar una implementación o, en su lugar, eliminar el artefacto desplegado antes de implementar de nuevo?

+0

try mvn release: rollback – om39a

+0

¿Por qué fallaría el despliegue? Si despliega un artefacto con la misma versión, simplemente sobrescribirá el existente. –

+3

Andrew - AFAIK, si intenta volver a implementar un artefacto existente, fallará. –

Respuesta

8

Parece que los administradores de middleware han configurado su instancia de repositorio remoto (Nexus o Artifactory o lo que sea) para no permitir el redespliegue de artefactos, y como @khmarbaise dice que hay buenas razones para eso. Nexus se puede configurar para permitir la eliminación de artefactos por parte de los usuarios en un rol particular o con privilegios de eliminación de artefactos. Si sus administradores lo configuraron de esa manera, quizás pueda solicitar el privilegio de eliminación y eliminar los artefactos ofensivos. O, tal vez, el administrador de Nexus aceptará hacerlo por usted.

Si ninguno de estos es posible, aquí hay algunas cosas para probar lo que podría evitar que esto suceda en el futuro:

  1. Si está utilizando el plugin release, hacer un simulacro (-DdryRun=true sobre la liberación : prepare la línea de comando) primero. Maven debe informar cualquier error sin comprometerse con SCM.
  2. Primero intente ejecutar mvn install en su grupo de proyectos. Esto instalará los artefactos en su repositorio local, no en el control remoto. Si hay un problema, puede eliminar los artefactos de su repositorio local y comenzar de cero, repitiendo hasta que obtenga una compilación completa.
  3. Si está ejecutando una compilación de varios módulos, hay command line options que permiten reanudar una compilación de Maven desde un proyecto en progreso.
  4. Defina -Dmaven.deploy.skip=true en la línea de comandos de Maven. Esto es similar a la sugerencia n. ° 2, excepto que Maven realmente cargará & configure el deploy plugin, simplemente no hará la implementación real en el repositorio remoto. Una vez que todo funcione, elimine la propiedad de omisión.
+0

Todas buenas sugerencias. Creo que iré por la opción 4 o similar ... ¡Thx! –

+0

Tengo un problema similar, todo fue bien hasta que obtuve un 502 (error de proxy) Supongo que mi servidor uni pensó que mi conexión era una amenaza. Ahora obtengo 400 (Solicitud incorrecta) porque los artefactos ya están en el servidor nexo. ¿Hay alguna manera de reanudar un lanzamiento: realizar? Puedo eliminar los artefactos, pero esto es mucho trabajo en el panel de control de nexus. Parece que tengo que eliminar cada subcarpeta de versión del proyecto de varios módulos a mano. Sin embargo, intentaré subir desde la red uni la próxima vez. – DarthB

2

Las posibles opciones se han incrementado;)

utilizar el parámetro deployAtEnd (Más información: here). Con este parámetro, los artefactos se implementan solo si todos los artefactos se crearon correctamente.

4

Sé que puede ser tarde, pero en Nexus hay una opción que permite la redistribución de artefactos.

enter image description here

basta con seleccionar los repositorios de la izquierda, seleccione el repositorio que desea cambiar la política y luego configurarlo para permitir Volver a implementar.

+0

Esta es una buena opción, pero estoy interesado en tal capacidad solo de mi compilación y no permitiré que nadie vuelva a implementar un artefacto lanzado. ¿Puedo habilitarlo en el momento de la compilación y desactivarlo cuando la compilación está completa? –

+0

no creo que sea posible porque quien decide si el artefacto puede ser redesplegado es el servidor, no el cliente – leozin

Cuestiones relacionadas