Sobre nós
Na 1C desenvolvemos não apenas uma 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
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
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
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