Auparavant, j'ai publié une question sur la façon de changer la version du projet Maven de la ligne de commande, ce qui m'a amené à un nouveau problème.
Auparavant, je pouvais obtenir le numéro de version car la version était stockée en tant que propriété facile à grep et à analyser à partir de la ligne de commande (bash). Maintenant que l'élément pom.xml est utilisé pour cela, il n'est plus unique car toutes les dépendances et peut-être d'autres aussi l'utilisent. Je pense qu'il n'y a aucun moyen d'obtenir le numéro de version actuel avec un script bash sans outils externes pour analyser xml ou une commande sed très sensible au contexte.
La solution la plus propre à mon avis serait que Maven distribue ces informations de version. Je pensais à écrire un plugin maven personnalisé pour récupérer différentes propriétés mais j'ai pensé que je demanderais d'abord ici.
Alors, existe-t-il un moyen simple d'obtenir la valeur de ${project.version}
sur la ligne de commande? Merci d'avance.
Solution
Merci pour l'aide. J'ai dû cd
manuellement le répertoire mais cela peut être fait facilement. Dans mon script bash, j'ai
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 } }'`
Ce qui me donne la version actuelle que je peux ensuite avancer. Grepping pourrait être plus simple mais je pensais que je voudrais aussi robuste que possible, donc je suis satisfait de la première ligne qui commence par un nombre et essayez de gérer cela comme un numéro de version.
# 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/"
}
Et je l'utilise en appelant simplement
new_version=$(advance_version $version)
J'espère que cela aide quelqu'un.
grep -e '^[[:digit:]]'