Anterior Emiti uma pergunta sobre como alterar a versão do projeto Maven da linha de comando que me levou a um novo problema.
Anteriormente, eu era capaz de obter o número da versão, pois a versão era armazenada como uma propriedade que era fácil de grep e analisar na linha de comando (bash). Agora que o elemento pom.xml é usado para isso, ele não é mais exclusivo, pois todas as dependências e talvez alguns outros também o usam. Eu acho que não há como obter o número da versão atual com um script bash sem ferramentas externas para analisar xml ou algum comando sed muito sensível ao contexto.
A solução mais limpa na minha opinião seria que o Maven distribuísse as informações dessa versão. Eu estava pensando em escrever um plug-in personalizado para recuperar propriedades diferentes, mas pensei em perguntar aqui primeiro.
Então, existe alguma maneira fácil de obter o valor da ${project.version}
linha de comando? Desde já, obrigado.
Solução
Obrigado pela ajuda. Eu tive que ir cd
para o diretório manualmente, mas isso pode ser feito facilmente. No meu script bash eu tenho
version=`cd $project_loc && mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`
O que me dá a versão atual que eu posso avançar. O Grepping pode ser mais simples, mas achei que fosse o mais robusto possível, por isso estou satisfeito com a primeira linha que começa com um número e tento lidar com isso como um número de versão.
# Advances the last number of the given version string by one.
function advance_version () {
local v=$1
# Get the last number. First remove any suffixes (such as '-SNAPSHOT').
local cleaned=`echo $v | sed -e 's/[^0-9][^0-9]*$//'`
local last_num=`echo $cleaned | sed -e 's/[0-9]*\.//g'`
local next_num=$(($last_num+1))
# Finally replace the last number in version string with the new one.
echo $v | sed -e "s/[0-9][0-9]*\([^0-9]*\)$/$next_num/"
}
E eu uso isso simplesmente chamando
new_version=$(advance_version $version)
Espero que isso ajude alguém.
grep -e '^[[:digit:]]'