Maven 입문 | 그밖에 | Java 프로그램 실행

Maven 프로젝트의 Java 프로그램 (main 메소드를 가진 클래스)를 Exec Maven Plugin에서 실행하는 방법에 대해 알아보겠다.

이번에는 pom.xml에 플러그인을 정의하지 않고, 명령 라인에서 클래스 이름과 인수 등을 전달하고 실행 해 본다.

실행 전에 자원 pom.xml 작성

이번 명령에서 실행하기 전에 아래와 같이 프로젝트의 pom.xml를 작성한다. 루트 디렉토리는 execplg 이다.

pom.xml

execplg/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.devkuma.mvn</groupId>
  <artifactId>execplg</artifactId>
  <version>1.0.0</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
</project>

main 폴더에 있는 Main 클래스 실행하기

1. Main 클래스 작성하기

execplg/src/main/java/com/devkuma/mvn/Main.java

package com.devkuma.mvn;

public class Main {
  public static void main(String[] args) {
   System.out.println("Class name:");
    System.out.println("  com.devkuma.mvn.Main");
    System.out.println("Arguments:");
    System.out.print("  arg0=");
    System.out.println(args[0]);
    System.out.print("  arg1=");
    System.out.println(args[1]);
  }
}

실행하면 명령 라인 인수가 출력된다.

2. 컴파일하기

Exec 플러그인 (exec : java)는 컴파일을 하지 않기 때문에, 필요에 따라 응용 프로그램 실행 전에 compile을 해야 한다.

> mvn compile

3. 명령 실행하기

프로젝트의 루트 디렉토리에서 다음 명령을 실행한다.

$ mvn exec:java -Dexec.mainClass="com.devkuma.mvn.Main" -Dexec.args="argument1 argument2"

이 경우, com.devkuma.mvn.Main 클래스가 실행된다. 인수는 argument1와 argument2가 된다.

test 폴더에 있는 TestMain 클래스 실행하기

1. Main 클래스 작성하기

execplg/src/test/java/com/devkuma/mvn/TestMain.java

package com.devkuma.mvn;

public class TestMain {
  public static void main(String[] args) {
    System.out.println("Class name:");
    System.out.println("  com.devkuma.mvn.TestMain");
    System.out.println("Arguments:");
    System.out.print("  arg0=");
    System.out.println(args[0]);
  }
}

실행하면 명령 라인 인수가 출력된다.

2. 컴파일하기

Exec 플러그인은 컴파일을 하지 않기 때문에 필요한 경우 test-compile을 해야 한다.

$ mvn test-compile

3. 명령 실행하기

명령의 예는 다음과 같다.

$ mvn exec:java -Dexec.mainClass=com.devkuma.mvn.TestMain -Dexec.classpathScope=test

-Dexec.classpathScope=test를 옵션으로 넣으면 src/test/java 클래스도 실행시킬 수 있다.

골(Goal) 대해

이번에는 exec:java를 사용했지만, exec:exec라는 골(Goal)도 있다. 큰 차이는 다음과 같다.

  • exec:java : Maven과 같은 VM에서, 인수의 Main 클래스를 실행한다.
  • exec:exec : Maven과는 다른 VM에, 인수의 Main 클래스를 실행한다.