1. 概要

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

Spring Bootアプリケーションのメインクラスは、Spring ApplicationContextを起動するpublicstatic void main()メソッドを含むクラスです。 デフォルトでは、メインクラスが明示的に指定されていない場合、Springはコンパイル時にクラスパスで1つを検索し、それらが見つからないか複数見つかった場合は開始に失敗します。

従来のJavaアプリケーションとは異なり、このチュートリアルで説明するメインクラスは、結果のJARまたはWARファイルのMETA-INF/MANIFEST.MFのMain-Classメタデータプロパティとして表示されません。

Spring Bootは、アーティファクトのMain-Classメタデータプロパティがorg。springframework.boot.loader.JarLauncher (または]に設定されていることを想定しています。 WarLauncher これは、メインクラスをjavaコマンドラインに直接渡すと、Spring Bootアプリケーションが正しく起動しないことを意味します。

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

Manifest-Version: 1.0
Start-Class: com.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>com.baeldung.DemoApplication</start-class>
</properties>

ご了承くださいこのプロパティは、spring-boot-starter-parentも追加した場合にのみ評価されますなので私たちの中で pom.xml

または、メインクラスは、pom.xmlのプラグインセクションでspring-boot-maven-pluginのmainClass要素として定義できます。

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

このMaven構成の例は、GitHubのにあります。

3. Gradle

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

プロジェクトのGradleファイルでは、mainClassNameをspringBoot構成ブロック内で定義できます。 ここで行われたこの変更は、bootRunおよびbootJarタスクによって取得されます。

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

または、メインクラスを bootJarGradleタスクのmainClassNameプロパティとして定義することもできます。

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

または、 bootJar タスクのマニフェスト属性として:

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

bootJar 構成ブロックで指定されたメインクラスは、タスク自体が生成するJARにのみ影響することに注意してください。 この変更は、bootRunなどの他のSpring BootGradleタスクの動作には影響しません。

ボーナスとして、 Gradleアプリケーションプラグインがプロジェクトに適用されている場合、 mainClassNameをグローバルプロパティとして定義できます:

mainClassName = 'com.baeldung.DemoApplication'

これらのGradle構成の例はGitHubにあります。

4. CLIの使用

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

Spring Bootのorg。springframework.boot.loader.PropertiesLauncherには、loader.mainという論理メインクラスをオーバーライドできるJVM引数が付属しています。

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

5. 結論

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

動作するコード例は、hereおよびhereにあります。