1.概要

このクイックチュートリアルでは、MavenとGradleを介してSpring Bootアプリケーションへのエントリポイントを定義するさまざまな方法を提供します。

Spring BootアプリケーションのメインクラスはSpring

ApplicationContext

を起動する

public static void main()

メソッドを含むクラスです。 ** デフォルトでは、メインクラスが明示的に指定されていない場合、Springはコンパイル時にクラスパス内のクラスを検索し、それらのどれもまたは複数が見つからないと起動に失敗します。

従来のJavaアプリケーションとは異なり、このチュートリアルで説明するメインクラスは、生成されるJARファイルまたはWARファイルのMETA-INF/MANIFEST.MFの

Main-Class

メタデータプロパティとしては表示されません。

Spring Bootは、アーティファクトの

Main-Class

メタデータプロパティが


_org.springframework.boot.loader.JarLauncher






(または

WarLauncher _






に設定されることを期待しています。これはメインクラスを直接javaコマンドラインに渡すことを意味しますt Spring Bootアプリケーションを正しく起動します。

マニフェストの例は次のようになります。

Manifest-Version: 1.0
Start-Class: org.baeldung.DemoApplication
Main-Class: org.springframework.boot.loader.JarLauncher

代わりに、アプリケーションを起動するために

JarLauncher

によって評価される

Start-Class

プロパティをマニフェストに定義する必要があります。

MavenとGradleを使ってこのプロパティを制御する方法を見てみましょう。

2. Maven

メインクラスは、

pom.xmlのプロパティセクションで、start-class

要素として定義できます。

<properties>
      <!-- The main class to start by executing "java -jar" -->
      <start-class>org.baeldung.DemoApplication</start-class>
</properties>

  • このプロパティはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.springframework.boot%22%20AND%20a%3Aも追加した場合にのみ評価されることに注意してください。 %22spring-boot-maven-plugin%22[spring-boot-starter-parent]** は、

    pom.xml



    <parent>

    と同じです。

あるいは、メインクラスは、

pom.xmlのプラグインセクションにある

spring-boot-maven-plugin

** の

mainClass__要素として定義できます。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>org.baeldung.DemoApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

このMaven設定の例はhttps://github.com/eugenp/tutorials/tree/master/spring-boot[over on GitHubにあります。]

3. Gradle

Spring Boot Gradleプラグインを使用している場合は、____org.springframework.bootから継承したいくつかの設定があります。ここでメインクラスを指定できます。

プロジェクトのGradleファイルでは、

メインクラス名



springBoot

設定ブロック内** で定義できます。ここで行われたこの変更は、

bootRun

および

bootJar

タスクによって採用されています。

springBoot {
    mainClassName = 'org.baeldung.DemoApplication'
}

  • あるいは、メインクラスは

    bootJar

    Gradleタスクの

    mainClassName

    プロパティとして定義することもできます。

bootJar {
    mainClassName = 'org.baeldung.DemoApplication'
}

  • または

    bootJar

    タスクのマニフェスト属性として:

bootJar {
    manifest {
    attributes 'Start-Class': 'org.baeldung.DemoApplication'
    }
}


bootJar

設定ブロックで指定されたメインクラスは、タスク自体が生成するJARにのみ影響を与えることに注意してください。この変更は、

bootRun

などの他のSpring Boot Gradleタスクの動作には影響しません。

ボーナスとして、

Gradleアプリケーションプラグイン

がプロジェクトに適用されている場合、**

mainClassName

をグローバルプロパティとして定義できます。

mainClassName = 'org.baeldung.DemoApplication'

我々はこれらのGradle設定の例を見つけることができます。

4. CLIを使う

コマンドラインインターフェースを介してメインクラスを指定することもできます。

Spring Bootの

org.springframework.boot.loader.PropertiesLauncher

には、

loader.main

という論理メインクラスをオーバーライドするためのJVM引数が付属しています。

java -cp bootApp.jar -Dloader.main=org.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher

5.まとめ

Spring Bootアプリケーションへのエントリポイントを指定する方法はいくつかあります。これらすべての設定はJARファイルまたはWARファイルのマニフェストを変更するための単なる異なる方法であることを知っておくことは重要です。

実用的なコード例はhttps://github.com/eugenp/tutorials/tree/master/spring-boot[ここ]およびhttps://github.com/eugenp/tutorials/tree/master/spring-boot-gradleにあります。[ここに]。