Maven : 인수를 전달하는 명령 줄에서 .java 파일을 실행하는 방법


88

다음과 같은 문제가 있습니다. 파일에 mvn대한 명령 줄에서 실행 하고 싶습니다 Main.java. Main.java매개 변수를 허용합니다. 명령 줄에서 어떻게합니까?

예제를 찾아 보았지만 성공하지 못했습니다. 누군가가 그 예를 들어서 나를 도울 수 있습니까?

나는 여기를 보았지만 내가 무엇을해야하는지 잘 이해하지 못했다.

또한 Main.java 폴더가 아닌 다른 폴더에서 해당 명령을 어떻게 실행합니까?

예를 들어는 Main.java에 있습니다 my/java/program/Main.java. 무엇을 넣어야하나요

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"

4
링크 된 튜토리얼에서 정확히 이해하지 못한 것은 무엇입니까? 꽤 간단합니다. 지금까지 시도한 코드를 질문에 추가하십시오.
Perception

기본적으로 내가하려는 것은 다른 자바 클래스에서 자바 클래스를 호출하는 것입니다. 일반적으로 Eclipse에서 해당 클래스를 실행합니다. 나는 Runtime.getRuntime (). exec ( ""); 다른 Java 프로그램에서 해당 클래스를 실행합니다. 그러나 Main.class를 실행하려면 mvn이 필요합니다. (I 질문 편집)
rousou phedon을

답변:


151

다음을 실행할 수 있습니다 mvn exec:exec -Dexec.args="arg1"..

이것은 인수 arg1 을 프로그램에 전달합니다 .

정규화 된 기본 클래스를 지정해야합니다. 예를 들어 패키지 테스트에있는 Main.java에는 다음이 필요합니다.

mvn exec:java  -Dexec.mainClass=test.Main

여기-f설명 된대로 매개 변수 를 사용하여 다른 디렉토리에서도 실행할 수 있습니다.

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm

여러 인수의 경우 명령 줄에서와 같이 공백으로 구분하면됩니다.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"

으로 구분 된 인수의 경우 따옴표 안에를 space사용하여 그룹화 할 수 있습니다 'argument separated with space'.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"

1
예, 그러나 main.java 파일이 어디에 있는지 어떻게 알 수 있습니까?
phedon rousou 2011

pom.xml이 없으면 어떻게 될까요? 다음 오류가 발생합니다. Cannot execute mojo : java. 기존 pom.xml이있는 프로젝트가 필요하지만 빌드에서 사용하지 않습니다.
페돈 루소

maven 프로젝트에는이 파일이없는 pom.xml이 필요하므로 maven을 사용하는 것은 의미가 없습니다. 그렇다면 먼저 메이븐 프로젝트를 만들고 싶습니까? 그러면 다른 모든 솔루션이 제대로 작동합니다.
Behe

Eclipse를 maven 플러그인과 함께 사용하기 때문에 자동으로 생성되었다고 생각했지만 분명히 잘못되었습니다. 나는 그것을 조사 할 것입니다
phedon rousou

공백이 포함 된 인수를 전달하는 방법은 무엇입니까?
Vanuan

6

으로 실행하는 것 외에도 다음을 사용하여 실행할 mvn exec:java수도 있습니다.mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"

이 경우 Xmx 인수를 어디에 넣을까요?
Fabich

1
에 그것을 넣어보십시오 -Dexec.args:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
베네딕트 코펠

자바이 더 나은 (IMO)에 비해 될 것입니다 어디 간부의 정직하고 접근이 표시되지 않습니다
Neowizard

5

예를 들어 쉘 스크립트를 추가하면 run.sh훨씬 더 쉬워집니다.

#!/usr/bin/env bash
export JAVA_PROGRAM_ARGS=`echo "$@"`
mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"

그러면 다음을 실행할 수 있습니다.

./run.sh arg1 arg2 arg3

이것은 훌륭하게 작동합니다! -Dexec.args = "$ @"이하지 않는 이유를 설명 할 수
baumato

1
$@모든 인수를 따옴표로 묶인 문자열 목록에 저장합니다. 직접 사용하려면 $*모든 인수를 단일 문자열로 사용할 수 있습니다 . 이거 해봤 어?
Tommy1005
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.