前回私は質問しましたコマンドラインからMavenプロジェクトのバージョンを変更する方法それが新たな問題につながりました。
以前は、バージョン番号は、コマンドライン (bash) から grep して解析しやすいプロパティとして保存されていたため、バージョン番号を取得できました。現在、<version>
このために pom.xml 要素が使用されているため、すべての依存関係とおそらく他の依存関係もこれを使用しているため、一意ではなくなりました。XML を解析するための外部ツールや、コンテキストを非常に意識したコマンドがなければ、 bash スクリプトで現在のバージョン番号を取得する方法はないと思います。sed
私の意見では、最もクリーンな解決策は、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 } }'`
これにより、現在のバージョンがわかり、それを進めることができます。Grepp の方が簡単かもしれませんが、できるだけ堅牢にしたいと思ったので、数字で始まる最初の行で満足し、これをバージョン番号として処理するようにしました。
# 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)
ベストアンサー1
のMaven ヘルプ プラグインどういうわけか、これについてすでに何か提案しています:
help:evaluate
ユーザーが指定した Maven 式を対話モードで評価します。
コマンドラインでこれを呼び出して取得する方法は次のとおりです${project.version}
。
mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
-Dexpression=project.version
としてコメントに記載によるセブ・T、Maven INFO ログなしでバージョンのみを印刷するには、さらに以下を使用します-q -DforceStdout
:
mvn help:evaluate -Dexpression=project.version -q -DforceStdout