Spring Boot: Konfigurieren einer Hauptklasse

1. Übersicht

Dieses kurze Tutorial bietet verschiedene Möglichkeiten, einen Einstiegspunkt in eine Spring Boot-Anwendung über Maven und Gradle zu definieren.

Die Hauptklasse einer Spring Boot-Anwendung ist eine Klasse, die eine öffentliche statische void main () -Methode enthält, mit der der Spring ApplicationContext gestartet wird . Wenn die Hauptklasse nicht explizit angegeben ist, sucht Spring zur Kompilierungszeit standardmäßig nach einer im Klassenpfad und startet nicht, wenn keine oder mehrere von ihnen gefunden werden.

Anders als bei herkömmlichen Java - Anwendungen, diskutierte die Hauptklasse in diesem Tutorial erscheint nicht als die Main-Klasse Metadateneigenschaft in META-INF / MANIFEST.MF des resultierenden JAR oder SIND - Datei.

Frühlings - Boot erwartet , dass die das Artefakt Main-Class - Metadaten - Eigenschaft auf gesetzt werden org.springframework.boot.loader.JarLauncher(oder WarLauncher )Dies bedeutet, dass das Übergeben unserer Hauptklasse direkt an die Java-Befehlszeile unsere Spring Boot-Anwendung nicht korrekt startet.

Ein Beispielmanifest sieht folgendermaßen aus:

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

Stattdessen müssen wir die Start-Class- Eigenschaft im Manifest definieren, das von JarLauncher ausgewertet wird , um die Anwendung zu starten.

Mal sehen, wie wir diese Eigenschaft mit Maven und Gradle steuern können.

2. Maven

Die Hauptklasse kann definiert werden als ein Start-Klasse - Element in der pom.xml s Eigenschaften Abschnitt:

  com.baeldung.DemoApplication  

Beachten Sie, dass diese Eigenschaft nur ausgewertet wird, wenn wir auch das übergeordnete Spring-Boot-Starter-Element als hinzufügenin unserer pom.xml .

Alternativ kann die Hauptklasse als mainClass- Element des Spring-Boot-Maven-Plugins im Plugin-Bereich unserer pom.xml definiert werden :

   org.springframework.boot spring-boot-maven-plugin  com.baeldung.DemoApplication    

Ein Beispiel für diese Maven-Konfiguration finden Sie auf GitHub.

3. Gradle

Wenn wir das Spring Boot Gradle-Plugin verwenden , gibt es einige von org.springframework.boot geerbte Konfigurationen, in denen wir unsere Hauptklasse angeben können.

In der Gradle-Datei des Projekts kann mainClassName im springBoot- Konfigurationsblock definiert werden . Diese hier vorgenommene Änderung wird von den Aufgaben bootRun und bootJar übernommen :

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

Alternativ kann die Hauptklasse als mainClassName- Eigenschaft der bootJar Gradle-Task definiert werden:

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

Oder als Manifestattribut der bootJar- Task:

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

Beachten Sie, dass die im BootJar- Konfigurationsblock angegebene Hauptklasse nur die JAR betrifft, die die Task selbst erzeugt. Die Änderung wirkt sich nicht auf das Verhalten anderer Spring Boot Gradle-Aufgaben wie bootRun aus .

Als Bonus kann mainClassName als globale Eigenschaft definiert werden , wenn das Gradle-Anwendungs-Plugin auf das Projekt angewendet wird :

mainClassName = 'com.baeldung.DemoApplication' 

Ein Beispiel für diese Gradle-Konfigurationen finden Sie auf GitHub.

4. Verwenden der CLI

Wir können eine Hauptklasse auch über die Befehlszeilenschnittstelle angeben.

Org.springframework.boot.loader.PropertiesLauncher von Spring Boot enthält ein JVM-Argument, mit dem Sie die logische Hauptklasse namens loader.main überschreiben können :

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

5. Schlussfolgerung

Es gibt mehrere Möglichkeiten, den Einstiegspunkt für eine Spring Boot-Anwendung anzugeben. Es ist wichtig zu wissen, dass all diese Konfigurationen nur verschiedene Möglichkeiten sind, das Manifest einer JAR- oder WAR-Datei zu ändern.

Beispiele für Arbeitscodes finden Sie hier und hier.