$@를 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, 이면 목록 , , ( 에 대한 세 개의 별도 인수 ) 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.

당신은 또한 볼 수 있습니다$*와 $@의 차이점은 무엇인가요?

관련 정보