1. ホーム
  2. バッシュ

[解決済み】Mavenプロジェクトのバージョンをbashのコマンドラインに取得する方法

2022-04-03 11:39:56

質問

前回は Mavenのプロジェクトベージョンをコマンドラインから変更する方法 それが新しい問題につながりました。

以前は、バージョンはコマンドライン (bash) から grep と解析が簡単なプロパティとして保存されていたので、バージョン番号を取得することができました。現在では、pom.xml の <version> 要素が使用され、すべての依存関係や他の依存関係もこれを使用しているため、もはや一意ではありません。bashスクリプトで現在のバージョン番号を取得する方法はないと思います。 なし XMLを解析するための外部ツールや、非常に文脈を意識した 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 } }'`

これにより、現在のバージョンを知ることができ、それを進めることができます。グレッピングの方が簡単かもしれませんが、できるだけ堅牢なものがいいと思ったので、数字で始まる最初の行で満足して、これをバージョン番号として処理するようにしています。

# 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)

解決方法は?

その Mavenヘルププラグイン は、なぜかすでにこのための何かを提案しています。

  • help:evaluate は、対話形式でユーザーから与えられた Maven 式を評価します。

以下は、コマンドラインから呼び出して ${project.version} :

mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
    -Dexpression=project.version