Maven versiones en un process de desarrollo paralelo

Maven versionando el process de desarrollo paralelo

Trabajo en un proyecto que usa SVN con el tronco y las twigs habituales. Tengo un nexo con dos repositorys con dos políticas diferentes "Release" y "Snapshot". Este proyecto produce artefactos que se utilizan en otros proyectos de mi empresa. Digamos que en este momento estamos en la versión 1.0.1 así que en Nexus en el repository de Release tengo artifacts-1.0.1.jar

Cuando se requiere una nueva function, realizo los siguientes pasos:

  1. Crea una nueva twig desde el tronco, digamos feature_1 desde el tronco, así que ahora tengo branches / feature_1
  2. Aumente la versión a 1.0.2-SNAPSHOT y en Nexus tendré 1.0.2-SNAPSHOT.jar

Antes de que se libere 1.0.2-SNAPSHOT, se requiere otra característica y repetiré los pasos anteriores:

  1. Crea una nueva twig desde el tronco, digamos feature_1 desde el tronco, así que ahora tengo branches / feature_2
  2. Aumente la versión a 1.0.3-SNAPSHOT y en Nexus tendré 1.0.2-SNAPSHOT.jar y 1.0.3-SNAPSHOT.jar

En algún momento necesito que feature_2 se active y realizo los siguientes pasos:

  1. Combinar feature_2 en el tronco
  2. Implementar en prod y empujar los artefactos 1.0.3.jar a Nexus.

El process funciona bien si no tengo una function_1 que aún está en progreso y tiene la versión 1.0.2-SNAPSHOT.jar, mientras que la versión de lanzamiento es 1.0.3.

Lamentablemente, las twigs de características no se lanzan secuencialmente. ¿Cómo puedo administrar el control de versiones en este caso? ¿Qué me estoy perdiendo?

¿Debería obligar al equipo que trabaja en 1.0.2-SNAPSHOT (feature_1) a fusionar trunk a branches / feature_1 y boost la versión de 1.0.2-SNAPSHOT a 1.0.4-SNAPSHOT?

No me suena bien.

Solo trunk debería tener un número de versión de lanzamiento, y fusionarse desde una bifurcación debería hacer que aumente. Las twigs deben tener el tronco fusionado en ellas regularmente (siempre que cambie), y deben tener el número de versión de la versión prevista con el sufijo de instantánea.

Por lo tanto, prod está en 1.0, por lo que es troncal. La característica 1 está dirigida a la versión 1.1, y la function 2 está dirigida a la versión 1.2. La twig Feature 1 es 1.1-snapshot, y la twig Feature 2 es 1.2-snapshot. Si todo va según lo planeado, combine la function 1 en el enlace troncal, suba el número de versión a 1.1 y suéltelo, elimine las instantáneas y fusione el enlace troncal en la twig de la function 2. La característica 2 se lanza de una manera similar.

Si la Característica 1 llega tarde, fusiona la function 2 en el enlace troncal, sube el número de versión del enlace a 1.1 y libera (eliminando instantáneas), fusiona el enlace troncal en la function 1, sube la versión a 1.2-instantánea (suponiendo que ahora esté orientada a esa versión), y construye tu primera instantánea.

Debe usar numbers de compilation u otro contador incremental como sufijo de su número de versión: 1.0.0.4432. Está utilizando svn, por lo que recomiendo usar el número de revisión de svn como la parte final, en lugar de un número de compilation.

El verdadero problema aquí son las twigs de larga vida. Debes investigar los distintivos de function si realmente quieres trabajar en grandes características. Alternativamente, trabaje en características más pequeñas para que esto ocurra raramente, entregando grandes características incrementalmente a través de la evolución en lugar de la revolución. Personalmente, no me gustan las banderas de características, así que prefiero un enfoque evolutivo.

Un problema asociado es que estás usando lo que a veces se llama 'vanity versioning'. La versión real es el número de revisión en svn (que es por qué los viejos me llaman a veces svn a Revision Management System), todo lo demás está compuesto y tiene sin base en la realidad. Esta es una de las razones por las que compañías como IntelliJ y Microsoft dejaron de usarlas y comenzaron a hablar sobre el año de lanzamiento y el recuento; por lo tanto, la versión 3 de IntelliJ 2016 se encuentra actualmente en EAP (beta) y tengo la compilation 163.4396, que es un número de vanidad (163 – año y lanzamiento) seguido de un número de compilation de su IC.