私がスクリプトで試したことrun.sh
:
mvn exec:java -Dexec.mainClass=my.App -Dexec.args="$@"
mvn exec:java -Dexec.mainClass=my.App -Dexec.args=$@
次のようにスクリプトを呼び出すと:
./run.sh arg1 arg2 arg3
パラメータはJavaアプリケーションに渡されません。代わりに、MavenはそれをMavenオプションとして解釈しようとします。
編集:オプションを使用しました-x
。私はこれを見る:
mvn exec:java -Dexec.mainClass=my.App -Dexec.args=arg1 arg2 arg3
どうやって評価できますか?
mvn exec:java -Dexec.mainClass=my.App -Dexec.args="arg1 arg2 arg3"
これで私の問題は解決します。様々なバリエーションを試してみましたが、うまくいきません。
答え1
シェルが展開され、-Dexec.args="$@"
位置引数のリストが、の場合はリスト、、arg1
(の3つの別々の引数)arg2
を取得します。拡張は常にリストであり、それを文字列に関連付けた結果(コードのように)は実際には定義されていません(ほとんどのシェルはここで説明されているように機能します)。arg3
-Dexec.args=arg1
arg2
arg3
mvn
"$@"
あなたは何ですか可能"$*"
代わりに使用したい拡張子は、常に最初の文字(通常は空白)を区切り文字として連結する位置引数リストの要素"$@"
で"$*"
構成される単一の文字列です。$IFS
これにより、-Dexec.args="$*"
文字列-Dexec.args=arg1 arg2 arg3
(のパラメータmvn
)を取得できます。
だから:
mvn exec:java -Dexec.mainClass=my.App -Dexec.args="$*"
mvn
引数にスペースが含まれている場合、ツールがそれを処理するために特別なエスケープ処理、引用、またはその他のエンコーディングをサポートしていない限り(引数リストでそれを使用する場合)、それを正しく解析することは困難です。私はMavenユーザーではないので、値をどのように解析するのかわかりませんexec.args
。
また、見ることができます$*と$@の違いは何ですか?