[解決済み】Mavenプロジェクトのバージョンをbashのコマンドラインに取得する方法
質問
前回は 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
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Windowsのコマンドラインに'which'に相当するものはありますか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み】SEDをワイルドカードで使用する場合
-
[解決済み] osx find exec rm find: exec: 不明な主またはオペレータ
-
[解決済み] Cp: ターゲットはディレクトリではありません
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] eval "$(docker-machine env default) "とする。
-
[解決済み] 構文エラー:オペランドが期待される(エラーメッセージは "+")。
-
[解決済み] あいまいなリダイレクト」エラーが発生する
-
[解決済み] シンプルなAsciiテーブルをCSVに変換する【終了】。
-
[解決済み] Bash - "fi ;;" の使い方は?