2012-04-05 12 views
5

tengo un artefacto que debe ser construido por varias plataformas de destino:Sincronización de versiones de artefactos a través de plataformas con proceso de liberación experto

  • Linux x86
  • de Windows x86
  • ARM11

por desgracia a la falta de crosscompilers, no es posible crear todas las versiones del artefacto de una vez.

Usando otras palabras, el objetivo es tener en el repositorio algo como esto

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • artefacto -1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

Tenga en cuenta que las versiones están sincronizadas. ¿Cómo lograr esto?

El hecho es que el proceso de lanzamiento actualiza la versión del pom.xml después de cada compilación. Así que mediante la construcción de forma consecutiva en varias plataformas que puedo lograr tener

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

pero esto no es lo que estoy buscando.

pude

  1. se ejecutan en Linux

    liberación mvn: preparar la liberación: realizar -DpushChanges = false

    (con pushChanges establece en false liberación no va a aumentar el número de versión en SCM)

  2. y luego ejecutar en Windows

    liberación mvn: preparar a liberar: realizar

    (esto aumentará el número de versión)

Pero entonces la responsabilidad de desencadenar los procesos de liberación en diversas plataformas en el orden adecuado recae en mí. ¿Hay alguna manera de que maven pueda ayudarme con esto?

¿Tiene alguna sugerencia?

Gracias


PS. Tenga en cuenta que esta no es una pregunta sobre cómo organizar en módulos. Se trata de cómo sincronizar los procesos de lanzamiento de un solo artefacto en múltiples plataformas.

Respuesta

0

mi punto de vista, se utiliza clasificadores (nombre de archivo del artefacto sufijo) como linux, windows o arm11 distinguir varios lanzamientos de artefactos, destinados a plataformas específicas. Por lo tanto, si crea un proyecto de varios módulos administrado por Maven, donde los módulos serían artefactos con el mismo groupId, el mismo artifactId, el mismo version (probablemente heredado de su padre común), pero diferente classifier, obtendrá exactamente lo que desea. En tal caso, siempre libera su POM de múltiples módulos (generalmente también es común para sus módulos) tener todos los módulos a la vez. Suponiendo misma-versión-para-toda-módulos-política (que parece encajar bastante bien aquí), básicamente se puede ejecutar:

mvn release:prepare release:perform -DautoVersionSubmodules

y eso es todo. Obtendrá artifact-1.0.0-linux.zip, artifact-1.0.0-windows.zip, artifact-1.0.0-arm11.zip artefactos lanzados. La siguiente versión de desarrollo se configurará en 1.0.1-SNAPSHOT para todos los módulos (a través de la herencia del elemento principal).

+0

Pero mi punto es que cuando estás en Linux, no puedes crear un binario para Windows (debido a algunas limitaciones de la cadena de herramientas). Entonces, el proceso de compilación cuando se ejecuta en Linux no puede crear archivos binarios de Windows. Y viceversa. Así que no puedes crear todos los binarios para todas las plataformas de una vez. --- Esta no es una pregunta sobre cómo organizar en módulos. Se trata de cómo sincronizar los procesos de publicación de un solo artefacto en múltiples plataformas. –

+0

OK, así que me temo que Maven no puede ayudarle a hacer esto tan automáticamente como quiera, a menos que desee (y tenga algo de tiempo) crear su propio complemento de lanzamiento. Como mencionaste, puedes hacer todo lo que necesites sin chocar con una versión y luego terminar de una manera global al final, pero esto es algo que debes recordar. También puede descartar versiones comunes (heredadas de los elementos principales) y escribir literalmente versiones en todos los módulos POM. Esta vez, sin embargo, debe controlar este proceso y asegurarse de que todos los módulos se publiquen con la versión y cada módulo se libere una vez. Realmente no puedo ver el 100% de manera automática. –

+0

Siempre tengo poco tiempo :) De todos modos, gracias por la ayuda. –

2

¿Has encontrado una solución para esto todavía? Es bueno saber que no soy el único que lucha con Maven :-)

De todos modos,

¿Se le permite desplegar una versión de lanzamiento de Nexus? Estoy pensando, usted podría hacer esto:

1 - Haga una "versión de mvn: prepare release: perform" desde una máquina de Windows - que debería tener artifact-1.0.1-windows.zip en nexus.

2 - Verifique el artefacto-1.0.1 etiqueta desde el control de origen

3 - Haz un "despliegue de mvn" desde Linux y arma11 (cualquiera que sea: P) - que debería tener también -linux.zip y -arm11.zip en el nexo.

Sin embargo, creo que, dependiendo de cómo esté configurado el nexo no le permitirá volver a implementar cualquier cosa con el mismo GAV (incluso si el clasificador es diferente)

0

Usted me ayudó a cabo con su pregunta ... no sabía acerca de la opción pushChanges = false.

Usando Jenkins puede configurar un trabajo en cada plataforma que realiza la versión de maven en serie utilizando la función "Disparador crea remotamente (por ejemplo, desde secuencias de comandos)". Si lo desea, puede usar una compilación parametrizada para elegir qué versión crear (si usa eso, necesita el Parameterized Trigger Plugin para desencadenar la compilación en las otras plataformas).

Cuestiones relacionadas