Experiencia en el uso de flatten-maven-plugin para simplificar el control de versiones en proyectos maven

sobre nosotros

En 1C desarrollamos no solo una plataforma 1C: Empresa en C ++ и JavaScript, pero también aplicaciones Java, en particular el nuevo entorno de desarrollo. Herramientas de desarrollo empresarial basado en Eclipse y un servidor de mensajería profundamente integrado con la plataforma - Sistemas de interacción.

Entrada

La mayoría de las veces usamos maven como sistema de compilación para aplicaciones Java, y en este breve artículo nos gustaría hablar sobre uno de los problemas que tuvimos que enfrentar en el proceso de organización del desarrollo y sobre el enfoque que nos permitió superarlo. problema.

Requisitos previos y flujo de trabajo

Debido a las características específicas del desarrollo de nuestros proyectos maven, utilizamos bastantes módulos, dependencias y proyectos secundarios. La cantidad de archivos pom en un árbol puede ser de decenas o incluso cientos.

Experiencia en el uso de flatten-maven-plugin para simplificar el control de versiones en proyectos maven

Parecería: no es gran cosa, lo crearon una vez y se olvidaron de él. Si necesita cambiar o agregar algo en todos los archivos a la vez, existen muchas herramientas convenientes en editores e IDE. ¿Cuál es el cambio regular más común en pom.xml? Creemos que los cambios en las versiones y dependencias del proyecto. Quizás alguien quiera discutir esto, pero esta es exactamente nuestra situación. La razón radica en el hecho de que, junto con el kernel, estamos desarrollando simultáneamente muchas de nuestras propias bibliotecas y, para la constante reproducibilidad de los resultados de la compilación y las pruebas, el uso de instantáneas no nos parece un enfoque conveniente. Por este motivo, es necesario aumentar el número de versión en los proyectos con cada compilación.

Además, de vez en cuando, un desarrollador necesita crear su propia rama de una biblioteca y comprobar su funcionalidad con todas las dependencias, para lo cual tiene que cambiar manualmente la versión de todas ellas.

Solución inicial

Con cambios de versión tan frecuentes y múltiples, quiero simplificar y automatizar el proceso dentro de CI. Aquí es donde viene al rescate un complemento conveniente y conocido. versiones-maven-plugin - conéctalo y ejecútalo

mvn -N versiones:set -DnewVersion=2.0.1

y Maven hará todo como debería: recorrerá la jerarquía de arriba a abajo, reemplazando todas las versiones: ¡belleza! Ahora todo lo que queda es generar una solicitud de extracción, los colegas revisarán los cambios y usted podrá unirse rápidamente al tronco. ¿Rápidamente? No importa cómo sea. Un par de cientos pom.xml para revisión, y esto sin contar el código. Además, nadie está a salvo de conflictos de fusión con una cantidad tan grande de archivos modificados. Cabe señalar aquí que en el proceso de CI, los cambios de versión se producen automáticamente junto con los cambios en la funcionalidad, y no de alguna manera por separado.

Nuevas funciones

Por un tiempo nos calmamos y, resignados, vivimos así hasta que los chicos de Proyecto Apache Maven A partir de la versión 3.5.0-beta-1, Maven no incluyó soporte para los llamados "marcadores de posición". La esencia de estos sustitutos es que pom.xml en lugar de una indicación específica de la versión del proyecto, se utilizan variables ${revisión}, ${sha1} и ${lista de cambios}. Los valores de estas propiedades se establecen en el elementopropiedades>, o se pueden definir a través de una propiedad del sistema

mvn -Drevision=2.0.0 paquete limpio

Los valores de las propiedades del sistema tienen prioridad sobre los valores definidos enpropiedades>.

El padre

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-padre
  Primer CI amigable
  ${revisión}${sha1}${lista de cambios}
  ...
  
    1.3.1
    -INSTANTÁNEA
    
  


Descendiente

  4.0.0
  
    org.apache.maven.ci
    ci-padre
    ${revisión}${sha1}${lista de cambios}
  
  org.apache.maven.ci
  ci-niño
   ...

Si desea compilar la versión 2.0.0-SNAPSHOT, simplemente use

    mvn -Drevision=2.0.0 paquete limpio

Si desea realizar un lanzamiento, simplemente reinicie SNAPSHOT

    mvn -Dchangelist= paquete limpio

*Los ejemplos anteriores están tomados de Artículo en el sitio web del Proyecto Maven Apache

Dura realidad

Todo está bien y saludable, es hora de sentir una sensación de satisfacción, pero no. Resulta que este método no funcionará para la instalación y el despliegue, ya que no será reemplazado en las descripciones de los artefactos publicados en el repositorio. ${revisión} en su significado y maven ya no entenderá de qué se trata.


    org.apache
    apache
    ${revisión}

Una luz al final de un túnel

Necesitamos buscar una solución al problema. Podría haber salvado la situación. complemento-aplanar-maven. Este complemento resuelve todas las variables en el pom, pero al mismo tiempo elimina mucha otra información que solo se necesita durante el ensamblaje y no se necesita al importar artefactos publicados a otros proyectos. El complemento también "rectifica" todas las dependencias entre padres e hijos y, como resultado, obtienes un pompón plano que incluye todo lo que necesitas. El inconveniente fue que elimina demasiado "extra", lo que no nos convenía en absoluto. Después de estudiar la información sobre el desarrollo de este complemento, resultó que no somos los únicos en el universo, y en agosto de 2018, se creó una solicitud de extracción en Github en el repositorio de complementos con el deseo de hacerlo posible. para determinar por nuestra cuenta cómo "estropear" pom.xml. Los desarrolladores escucharon las voces de los que sufrían, y ya en diciembre, con el lanzamiento de la nueva versión 1.1.0, apareció un nuevo modo, resolveCiFriendliesOnly, en el complemento flatten-maven, que era más adecuado que nunca: deja pom.xml tal cual, excepto el elemento y permite ${revisión}, ${sha1} и ${lista de cambios}.

Agregar un complemento al proyecto


  
    org.codehaus.mojo
    complemento-aplanar-maven
    1.1.0
    
      verdadero
      resolverCiFriendliesOnly
    
    
      
        aplanar
        recursos-proceso
        
          aplanar
        
      
      
        aplanar.limpiar
        limpio
        
          limpio
        
      
    
  

¡Ya está!

Final feliz

De ahora en adelante, para cambiar la versión de todo el proyecto y que todas las dependencias lo sepan, solo necesitamos editar el elemento.revisión> solo en la raíz pom.xml. A la revisión no llegan cien o dos de estos archivos con el mismo cambio, sino uno. Bueno, no es necesario usar versiones-maven-plugin.

Fuente: habr.com

Añadir un comentario