내가 스크립트에서 시도한 것 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=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
.
당신은 또한 볼 수 있습니다$*와 $@의 차이점은 무엇인가요?