Experiência no uso do plugin flatten-maven para simplificar o controle de versão em projetos maven

Sobre nós

Na 1C desenvolvemos não apenas uma plataforma 1C: Empresa em C ++ и JavaScript, mas também aplicativos Java - em particular o novo ambiente de desenvolvimento Ferramentas de desenvolvimento empresarial baseado em Eclipse e um servidor de mensagens profundamente integrado à plataforma - Sistemas de Interação.

Entrada

Na maioria das vezes usamos o maven como um sistema de construção para aplicativos Java, e neste breve artigo gostaríamos de falar sobre um dos problemas que tivemos que enfrentar no processo de organização do desenvolvimento e sobre a abordagem que nos permitiu superar isso problema.

Pré-requisitos e fluxo de trabalho

Devido às especificidades de desenvolvimento em nossos projetos maven, usamos muitos módulos, dependências e projetos filhos. O número de arquivos pom em uma árvore pode ser de dezenas ou até centenas.

Experiência no uso do plugin flatten-maven para simplificar o controle de versão em projetos maven

Ao que parece: não é grande coisa, eles criaram uma vez e esqueceram. Se você precisar alterar ou adicionar algo em todos os arquivos de uma vez, existem muitas ferramentas convenientes em editores e IDEs. Qual é a alteração regular mais comum no pom.xml? Acreditamos que mudanças nas versões e dependências do projeto. Talvez alguém queira discutir isso, mas esta é exatamente a nossa situação. A razão está no fato de que, junto com o kernel, estamos desenvolvendo simultaneamente muitas de nossas próprias bibliotecas e, para a constante reprodutibilidade dos resultados de construção e teste, o uso de snapshots não nos parece uma abordagem conveniente. Por esse motivo, é necessário aumentar o número da versão nos projetos a cada build.

Além disso, de tempos em tempos, um desenvolvedor precisa construir seu próprio ramo de uma biblioteca e verificar sua funcionalidade em relação a todas as dependências, para as quais ele precisa alterar manualmente a versão de todas elas.

Solução inicial

Com mudanças de versão tão frequentes e múltiplas, quero simplificar e automatizar o processo dentro do CI. É aqui que um plugin conveniente e conhecido vem em socorro. versões-maven-plugin - conecte-o e inicie-o

mvn -N versões:set -DnewVersion=2.0.1

e o Maven fará tudo como deveria: percorrerá a hierarquia de cima para baixo, substituindo todas as versões - beleza! Agora só falta fazer uma solicitação pull, os colegas revisarão as alterações e você poderá ingressar rapidamente no tronco. Rapidamente? Não importa como seja. Algumas centenas pom.xml para revisão, e isso sem contar o código. Além disso, ninguém está imune a conflitos de mesclagem com um número tão grande de arquivos alterados. Deve-se observar aqui que no processo de CI, as alterações de versão ocorrem automaticamente junto com as alterações na funcionalidade, e não de alguma forma separadamente.

Novos recursos

Por um tempo nos acalmamos e, resignados, vivemos assim até os caras do Projeto Maven Apache A partir da versão 3.5.0-beta-1, o Maven não incluiu suporte para os chamados “placeholders”. A essência desses substitutos é que pom.xml em vez de uma indicação específica da versão do projeto, são utilizadas variáveis ${revisão}, ${sha1} и ${lista de alterações}. Os valores dessas propriedades são definidos no elementoPropriedades>, ou podem ser definidos através de uma propriedade do sistema

mvn -Drevision=2.0.0 pacote limpo

Os valores das propriedades do sistema têm precedência sobre os valores definidos emPropriedades>.

O pai

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-pai
  Primeiro CI amigável
  ${revisão}${sha1}${lista de alterações}
  ...
  
    1.3.1
    -INSTANTÂNEO
    
  


Descendente

  4.0.0
  
    org.apache.maven.ci
    ci-pai
    ${revisão}${sha1}${lista de alterações}
  
  org.apache.maven.ci
  ci-criança
   ...

Se você deseja construir a versão 2.0.0-SNAPSHOT, basta usar

    mvn -Drevision=2.0.0 pacote limpo

Se você quiser fazer um lançamento, basta redefinir o SNAPSHOT

    mvn -Dchangelist= pacote limpo

*Os exemplos acima foram retirados de artigos no site do Projeto Maven Apache

Realidade dura

Tudo está bom e saudável, é hora de sentir satisfação, mas não. Acontece que este método não funcionará para instalação e implantação, pois não será substituído nas descrições dos artefatos publicados no repositório ${revisão} sobre seu significado e o especialista não entenderá mais do que se trata.


    org.apache
    apache
    ${revisão}

Uma luz no fim de um túnel

Precisamos buscar uma solução para o problema. Poderia ter salvado a situação plugin flatten-maven. Este plugin resolve todas as variáveis ​​​​no pom, mas ao mesmo tempo elimina muitas outras informações que são necessárias apenas durante a montagem e não são necessárias ao importar artefatos publicados para outros projetos. O plugin também “corrige” todas as dependências pai-filho e, como resultado, você obtém um pom plano que inclui tudo o que você precisa. O inconveniente é que corta muito “extra”, o que não nos agradou em nada. Depois de estudar as informações sobre o desenvolvimento deste plugin, descobriu-se que não somos os únicos no universo, e já em agosto de 2018, um pull-request foi criado no Github no repositório de plugins com o desejo de tornar isso possível para determinar por conta própria como “estragar” o pom.xml. Os desenvolvedores ouviram as vozes daqueles que sofrem, e já em dezembro, com o lançamento da nova versão 1.1.0, um novo modo, resolveCiFriendliesOnly, apareceu no plugin flatten-maven, que estava mais adequado do que nunca - deixa pom.xml como está, exceto para o elemento e permite ${revisão}, ${sha1} и ${lista de alterações}.

Adicionando um plugin ao projeto


  
    org.codehaus.mojo
    plugin flatten-maven
    1.1.0
    
      verdadeiro
      resolverCiFriendliesOnly
    
    
      
        achatar
        recursos de processo
        
          achatar
        
      
      
        achatar.limpar
        limpar
        
          limpar
        
      
    
  

Feito!

Final feliz

A partir de agora, para alterar a versão de todo o projeto e avisar todas as dependências, basta editar o elementorevisão> apenas na raiz pom.xml. Não chegam à revisão cem ou dois desses arquivos com a mesma alteração, mas um. Bem, não há necessidade de usar versões-maven-plugin.

Fonte: habr.com

Adicionar um comentário