메이븐 런 프로젝트


231

Java 클래스의 기본 메소드를 간단히 실행하기위한 Maven "단계"또는 "목표"가 있습니까? 단순히 "mvn run"과 같은 것을 수행하여 수동으로 테스트하고 싶은 프로젝트가 있습니다.

답변:


348

exec maven 플러그인을 참조하십시오 . 다음을 사용하여 Java 클래스를 실행할 수 있습니다.

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

mvn exec:java플러그인 구성이 pom.xml에 있는 것처럼 간단하게 호출 할 수 있습니다 . Mojohaus의 플러그인 사이트에 보다 자세한 예제가 있습니다.

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
이것이 답변의 모습입니다! 참조 + 간단한 예 + 복잡한 예 간단한 예제는 나를 위해 속임수를
썼습니다

1
이 플러그인의 최신 버전이 (새로운 이상 1.2.1?)
알렉산더 밀스

예, 최신 버전이 있으므로 버전 1.2.1을 사용하지 않으려는 경우 1 대 1 위의 조각을 복사하지 마십시오 . 최신 버전 은 mojohaus.org/exec-maven-plugin/usage.html 을 참조하십시오. 1.6.0
user1053510

감사합니다. 다른 모듈의 종속성이있는 하위 모듈에서 주 클래스를 실행하는 방법도 알고 있습니까?
user1767316

이것은 실제로 메인 클래스를 운영하지 않습니다
덱스터

23

1. POM.xml 편집

에 다음 속성을 추가하십시오 pom.xml. main메소드 가 포함 된 완전한 클래스 이름 (예 : 패키지 이름)을 사용해야합니다 .

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. 커맨드 실행

이제 터미널에서 다음 명령을 트리거하십시오.

mvn clean compile exec:java

참고-Dexec.args="xxx" 플래그 를 통해 추가 인수를 전달할 수 있습니다 .


이것이 실제로 작동합니까? <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> 및 <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> 둘 다로 시도했지만 작동하지 않습니다. . 오류는 동일합니다 : [ERROR] newtrex 프로젝트에서 목표 org.codehaus.mojo : exec-maven-plugin : 1.6.0 : java (default-cli)를 실행하지 못했습니다 : 목표 org.codehaus.mojo에 대한 'mainClass'매개 변수 : exec-maven-plugin : 1.6.0 : java가 없거나 잘못되었습니다-> [도움말 1]
Nenad Bulatovic

게시물 을 확인하고 싶을 수도 있습니다
Saikat

@NenadBulatovic : $ 또는 {}없이 $ {foo.bar.SomeMainClass}를 foo.bar.SomeMainClass->로 대체하면 작동합니다.
Krishna Santosh Sampath

14

위에서 언급 한 답변은 정확하지만 나 같은 멍청한 놈을 위해 단순화하고 있습니다. 프로젝트의 pom 파일로 이동하십시오. 새 속성을 추가하고 exec.mainClass기본 메서드가 포함 된 클래스로 값을 지정하십시오. 나에게는이었다 DriverClass에서 mainpkg. 프로젝트에 따라 변경하십시오. 여기에 이미지 설명을 입력하십시오

이 작업을 수행하면 프로젝트가 들어있는 폴더로 이동 pom.xml하여 명령 프롬프트에서 실행하십시오 mvn exec:java. 메인 메소드를 호출해야합니다.


8

pom.xml에 새 플러그인을 추가 할 필요가 없습니다. 이 명령을 실행하십시오

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

자세한 사용법 은 maven exec 플러그인 을 참조하십시오 .


추가 인수를 통해-Dexec.args="...arg..."
sstn


2

clean package exec:java -P Class_Containing_Main_Method 다음 Maven Setup을 사용하여 프로젝트에 하나의 Main method (PSVM) 만있는 경우 명령도 옵션입니다.

다음 <properties></properties>섹션 에서 클래스를 언급하는 것을 잊지 마십시오 pom.xml.

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

위의 Maven Setup과 함께 STS Run Configuration :

여기에 이미지 설명을 입력하십시오


그것은 나에게 옳아 보이지 않습니다. '프로필'에 대해 -P가 아닙니까? 커맨드 라인에서 지정하면 왜 플러그인 속성에 넣어야합니까?
Rup

@Rup 예, -P프로필입니다. Maven 프로젝트를 실행하는 옵션이기도하므로 이것을 공유했습니다.
Abhijeet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.