以前、Mavenプロジェクトのバージョンをコマンドラインから変更して新しい問題を引き起こす方法について質問しました。
以前は、バージョンがコマンドライン(bash)から簡単にgrepして解析できるプロパティとして保存されていたため、バージョン番号を取得できました。これでpom.xml要素が使用されるようになりましたが、すべての依存関係とおそらく他の依存関係もこれを使用しているため、一意ではなくなりました。xmlを解析するための外部ツールまたは非常にコンテキストに対応したsedコマンドがないと、bashスクリプトで現在のバージョン番号を取得する方法はないと思います。
私の意見で最もクリーンなソリューションは、Mavenがこのバージョン情報を配布することです。さまざまなプロパティを取得するためのカスタムmavenプラグインを作成することを考えていましたが、最初にここで質問したいと思いました。
それで、${project.version}
コマンドラインに値を取得する簡単な方法はありますか?前もって感謝します。
解決
お手伝いありがとう。私はcd
手動でディレクトリに行かなければなりませんでしたが、それは簡単に行うことができます。私のbashスクリプトには
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 } }'`
これにより、次に進むことができる現在のバージョンがわかります。Greppingの方が単純かもしれませんが、できるだけ堅牢にしたいと思ったので、番号で始まる最初の行に満足し、バージョン番号としてこれを処理しようとしました。
# 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/"
}
そして、私はこれを単に呼び出すことで使用します
new_version=$(advance_version $version)
これが誰かを助けることを願っています。
grep -e '^[[:digit:]]'