$ @をMavenのexec.argsに渡す方法は?

$ @をMavenのexec.argsに渡す方法は?

私がスクリプトで試したこと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=arg1arg2arg3mvn"$@"

あなたは何ですか可能"$*"代わりに使用したい拡張子は、常に最初の文字(通常は空白)を区切り文字として連結する位置引数リストの要素"$@""$*"構成される単一の文字列です。$IFSこれにより、-Dexec.args="$*"文字列-Dexec.args=arg1 arg2 arg3(のパラメータmvn)を取得できます。

だから:

mvn exec:java -Dexec.mainClass=my.App -Dexec.args="$*"

mvn引数にスペースが含まれている場合、ツールがそれを処理するために特別なエスケープ処理、引用、またはその他のエンコーディングをサポートしていない限り(引数リストでそれを使用する場合)、それを正しく解析することは困難です。私はMavenユーザーではないので、値をどのように解析するのかわかりませんexec.args

また、見ることができます$*と$@の違いは何ですか?

関連情報