Sobre nós
Na 1C desenvolvemos não apenas uma plataforma em и , mas também aplicativos Java - em particular o novo ambiente de desenvolvimento baseado em Eclipse e um servidor de mensagens profundamente integrado à plataforma - .
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.

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 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 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 . 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
