Zuvor habe ich eine Frage zum Ändern der Maven-Projektversion über die Befehlszeile gestellt, die mich zu einem neuen Problem führte.
Zuvor konnte ich die Versionsnummer abrufen, da die Version als eine Eigenschaft gespeichert wurde, die einfach über die Befehlszeile (Bash) zu erfassen und zu analysieren war. Nachdem das Element pom.xml dafür verwendet wird, ist es nicht mehr eindeutig, da alle Abhängigkeiten und möglicherweise auch einige andere dies verwenden. Ich denke, es gibt keine Möglichkeit, die aktuelle Versionsnummer mit einem Bash-Skript ohne externe Tools zum Parsen von XML oder einen sehr kontextsensitiven sed-Befehl abzurufen.
Die sauberste Lösung meiner Meinung nach wäre, dass Maven diese Versionsinformationen verteilt. Ich dachte daran, ein benutzerdefiniertes Maven-Plugin zum Abrufen verschiedener Eigenschaften zu schreiben, dachte aber, ich würde hier zuerst nachfragen.
Gibt es eine einfache Möglichkeit, den Wert von ${project.version}
auf die Befehlszeile zu übertragen? Danke im Voraus.
Lösung
Danke für die Hilfe. Ich musste cd
manuell in das Verzeichnis, aber das kann leicht gemacht werden. In meinem Bash-Skript habe ich
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 } }'`
Das gibt mir die aktuelle Version, die ich dann weiterentwickeln kann. Grepping mag einfacher sein, aber ich dachte, ich möchte so robust wie möglich sein, also bin ich mit der ersten Zeile, die mit einer Nummer beginnt, zufrieden und versuche, diese als Versionsnummer zu behandeln.
# 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/"
}
Und ich benutze dies, indem ich einfach anrufe
new_version=$(advance_version $version)
Hoffe das hilft jemandem.
grep -e '^[[:digit:]]'