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 クラスを実行する。