In precedenza avevo fatto una domanda su come cambiare la versione del progetto Maven dalla riga di comando che mi ha portato a un nuovo problema.
In precedenza ero in grado di ottenere il numero di versione poiché la versione era memorizzata come una proprietà che era facile da grep e analizzare dalla riga di comando (bash). Ora che l'elemento pom.xml viene utilizzato per questo, non è più unico poiché tutte le dipendenze e forse anche alcuni altri lo usano. Penso che non ci sia modo di ottenere l'attuale numero di versione con uno script bash senza strumenti esterni per l'analisi di XML o qualche comando sed molto sensibile al contesto.
La soluzione più pulita secondo me sarebbe che Maven distribuisse queste informazioni sulla versione. Stavo pensando di scrivere un plug-in personalizzato maven per recuperare proprietà diverse, ma ho pensato di chiedere prima qui.
Quindi, c'è un modo semplice per ottenere il valore della ${project.version}
riga di comando? Grazie in anticipo.
Soluzione
Grazie per l'aiuto. Ho dovuto cd
accedere manualmente alla directory, ma ciò può essere fatto facilmente. Nel mio script bash che ho
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 } }'`
Il che mi dà la versione attuale che posso quindi avanzare. Grepping potrebbe essere più semplice, ma ho pensato che mi sarebbe piaciuto il più robusto possibile, quindi sono soddisfatto della prima riga che inizia con un numero e provo a gestirlo come un numero di versione.
# 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 lo uso semplicemente chiamando
new_version=$(advance_version $version)
Spero che questo aiuti qualcuno.
grep -e '^[[:digit:]]'