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