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 javac。 ただし、かなり大きなクラスパスを使用している場合、これは面倒な場合があります。 逆に、このプラグインを使用すると、Mavenがクラスパスの入力を自動的に処理します。

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

ただし、明示的なexecmainClass 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から入手できます。