Spring Boot: Konfigurere en hovedklasse
1. Oversikt
Denne raske opplæringen gir forskjellige måter å definere et inngangspunkt til en Spring Boot-applikasjon via Maven og Gradle.
Hovedklassen til en Spring Boot-applikasjon er en klasse som inneholder en offentlig statisk ugyldig hoved () metode som starter våren ApplicationContext. Som standard, hvis hovedklassen ikke er eksplisitt spesifisert, vil Spring søke etter en i klassestien på kompileringstidspunktet og unnlater å starte hvis ingen eller flere av dem blir funnet.
I motsetning til i vanlige Java-applikasjoner, vises ikke hovedklassen som er diskutert i denne opplæringen som Hovedklasse metadataegenskap i META-INF / MANIFEST.MF for den resulterende JAR- eller WAR-filen.
Spring Boot forventer gjenstandene Hovedklasse metadataegenskapen skal settes til org.springframework.boot.loader.JarLauncher(eller WarLauncher)som betyr at å sende hovedklassen direkte til java-kommandolinjen ikke vil starte vår Boot Boot-applikasjon riktig.
Et eksempel på manifest ser slik ut:
Manifest-versjon: 1.0 Start-klasse: com.baeldung.DemoApplication Hovedklasse: org.springframework.boot.loader.JarLauncher
I stedet må vi definere Start-klasse eiendom i manifestet som evalueres av JarLauncher for å starte søknaden.
La oss se hvordan vi kan kontrollere denne egenskapen ved hjelp av Maven og Gradle.
2. Maven
Hovedklassen kan defineres som en startklasse element i pom.xml'S eiendomsdel:
com.baeldung.DemoApplication
Noter det denne egenskapen vil bare bli evaluert hvis vi også legger til våren-boot-starter-foreldre som i vår pom.xml.
Alternativt hovedklassen kan defineres som hovedklasse element av spring-boot-maven-plugin i plugin-delen av vår pom.xml:
org.springframework.boot spring-boot-maven-plugin com.baeldung.DemoApplication
Et eksempel på denne Maven-konfigurasjonen finner du på GitHub.
3. Gradere
Hvis vi bruker Spring Boot Gradle-plugin, det er noen få konfigurasjoner arvet fra org.springframework.boot hvor vi kunne spesifisere hovedklassen vår.
I prosjektets Gradle-fil, mainClassName kan defineres innenfor springBoot konfigurasjonsblokk. Denne endringen som er gjort her blir plukket opp av bootRun og bootJar oppgave:
springBoot {mainClassName = 'cpm.baeldung.DemoApplication'}
Alternativt kan hovedklassen defineres som mainClassName tilhører bootJar Gradle oppgave:
bootJar {mainClassName = 'cpm.baeldung.DemoApplication'}
Eller som en manifest attributt for bootJar oppgave:
bootJar {manifest {attributter 'Start-Class': 'com.baeldung.DemoApplication'}}
Merk at hovedklassen spesifisert i bootJar konfigurasjonsblokk påvirker bare JAR som selve oppgaven produserer. Endringen påvirker ikke oppførselen til andre Spring Boot Gradle-oppgaver som bootRun.
Som en bonus, hvis Gradle applikasjons plugin blir brukt på prosjektet, mainClassName kan defineres som en global eiendom:
mainClassName = 'com.baeldung.DemoApplication'
Vi kan finne et eksempel på disse Gradle-konfigurasjonene på GitHub.
4. Bruke CLI
Vi kan også spesifisere en hovedklasse via kommandolinjegrensesnittet.
Vårstøvler org.springframework.boot.loader.PropertiesLauncher kommer med et JVM-argument for å la deg overstyre den logiske hovedklassen som heter laster. hoved:
java -cp bootApp.jar -Dloader.main = com.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher
5. Konklusjon
Det er mer enn noen få måter å spesifisere inngangspunktet til en Spring Boot-applikasjon. Det er viktig å vite at alle disse konfigurasjonene bare er forskjellige måter å endre manifestet til en JAR- eller WAR-fil på.
Eksempler på arbeidskoder finner du her og her.