MavenでJavaメインメソッドを実行する
1. 概要
この短いチュートリアルでは、Mavenを使用して任意のJavaクラスから任意のメインメソッドを実行する方法を説明します。
2. exec-maven-plugin
次のクラスがあるとしましょう。
public class Exec {
private static final Logger LOGGER = LoggerFactory.getLogger(Exec.class);
public static void main(String[] args) {
LOGGER.info("Running the main method");
if (args.length > 0) {
LOGGER.info("List of arguments: {}", Arrays.toString(args));
}
}
}
そして、コマンドラインからMavenを介してそのメインメソッドを実行したいと思います。
これを行うには、exec-maven-pluginを使用できます。 具体的には、このプラグインの exec:java goal は、プロジェクトの依存関係をクラスパスとして、提供されたJavaクラスを実行します。
Exec クラスのメインメソッドを実行するには、クラスの完全修飾名をプラグインに渡す必要があります。
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec"
02:26:45.112 INFO com.baeldung.main.Exec - Running the main method
上に示したように、 exec.mainClass systemプロパティを使用して、完全修飾クラス名を渡します。
また、mainメソッドを実行する前に、クラスパスの準備ができていることを確認する必要があります。 そのため、mainメソッドを実行する前にソースコードをコンパイルしています。
プレーンでも同じことができます java と
3. 引数の受け渡し
コマンドラインからmainメソッドに引数を渡すこともできます。 これを行うには、exec.argsシステムプロパティを使用できます。
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \
-Dexec.args="First Second"
02:31:08.235 INFO com.baeldung.main.Exec - Running the main method
02:31:08.236 INFO com.baeldung.main.Exec - List of arguments: [First, Second]
上に示したように、スペースで区切られた引数のリストを渡します。 さらに、 exec.argumentssystemプロパティを介して引数のコンマ区切りリストを使用できます。
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \
-Dexec.arguments="Hello World,Bye"
02:32:25.616 INFO com.baeldung.main.Exec - Running the main method
02:32:25.618 INFO com.baeldung.main.Exec - List of arguments: [Hello World, Bye]
これらの2つのオプションは、引数自体で区切り文字(スペースまたはコンマ)を使用する場合に役立ちます。
4. カスタム構成
pom.xmlでプラグインの依存関係を明示的に宣言することもできます。 このようにして、カスタム構成とデフォルト構成を使用できます。
たとえば、プラグインの構成でデフォルトのメインクラスを指定できます。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.baeldung.main.Exec</mainClass>
</configuration>
</plugin>
</plugins>
</build>
ここで、目的のクラスの完全修飾名を指定しない場合、com.baeldung.main.Execが使用されます。
$ mvn compile exec:java
02:33:14.197 INFO com.baeldung.main.Exec - Running the main method
ただし、明示的なexec。mainClass systemプロパティを使用して、このデフォルト構成をオーバーライドすることは可能です。
さらに、構成でデフォルトのプログラム引数を指定することもできます。
<configuration>
<mainClass>com.baeldung.main.Exec</mainClass>
<arguments>
<argument>First</argument>
<argument>Second</argument>
</arguments>
</configuration>
このように、コマンドラインでこれらの引数を渡す必要はありません。
$ mvn clean compile exec:java
02:34:24.448 INFO com.baeldung.main.Exec - Running the main method
02:34:24.450 INFO com.baeldung.main.Exec - List of arguments: [First, Second]
これらの構成に加えて、公式ドキュメントでカバーされている利用可能なものがたくさんあります。
5. 結論
この短い記事では、コマンドラインからexec-maven-pluginを介してメインメソッドを実行する方法を説明しました。
いつものように、すべての例はGitHubでから入手できます。