Anteriormente emití una pregunta sobre cómo cambiar la versión del proyecto Maven desde la línea de comandos que me llevó a un nuevo problema.
Anteriormente pude obtener el número de versión ya que la versión se almacenaba como una propiedad que era fácil de seleccionar y analizar desde la línea de comandos (bash). Ahora que el elemento pom.xml se usa para esto, ya no es único ya que todas las dependencias y tal vez otros también lo usan. Creo que no hay forma de obtener el número de versión actual con un script bash sin herramientas externas para analizar xml o algún comando sed muy sensible al contexto.
La solución más limpia en mi opinión sería que Maven entregue la información de esta versión. Estaba pensando en escribir un complemento Maven personalizado para recuperar diferentes propiedades, pero pensé en preguntar aquí primero.
Entonces, ¿hay alguna manera fácil de obtener el valor de ${project.version}
la línea de comando? Gracias por adelantado.
Solución
Gracias por la ayuda. Tuve que cd
ir al directorio manualmente, pero eso se puede hacer fácilmente. En mi script bash tengo
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 } }'`
Lo que me da la versión actual que luego puedo avanzar. El grepping podría ser más simple, pero pensé que me gustaría lo más robusto posible, así que estoy satisfecho con la primera línea que comienza con un número y trato de manejarlo como un número de versión.
# 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/"
}
Y uso esto simplemente llamando
new_version=$(advance_version $version)
Espero que esto ayude a alguien.
grep -e '^[[:digit:]]'