Перейти к основному содержимому

Spring Boot: настройка основного класса

· 3 мин. чтения

1. Обзор

В этом кратком руководстве представлены различные способы определения точки входа в приложение Spring Boot с помощью Maven и Gradle.

Основной класс приложения Spring Boot — это класс, который содержит общедоступный метод static void main() , который запускает Spring ApplicationContext . По умолчанию, если основной класс не указан явно, Spring будет искать его в пути к классам во время компиляции и не запустится, если ни один из них или несколько из них не будут найдены.

В отличие от обычных приложений Java, основной класс, обсуждаемый в этом руководстве, не отображается как свойство метаданных основного класса в META-INF/MANIFEST.MF результирующего файла JAR или WAR.

Spring Boot ожидает, что для свойства метаданных Main-Class артефакта будет установлено значение org.springframework.boot.loader.JarLauncher ** (или WarLauncher ) ** , что означает, что передача нашего основного класса непосредственно в командную строку java не запустит наше приложение Spring Boot правильно.

Примерный манифест выглядит так:

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

Вместо этого нам нужно определить свойство Start-Class в манифесте, которое оценивается JarLauncher для запуска приложения.

Давайте посмотрим, как мы можем управлять этим свойством с помощью Maven и Gradle.

2. Мавен

Основной класс можно определить как элемент начального класса в разделе свойств pom.xml :

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

Обратите внимание, что это свойство будет оцениваться только в том случае, если мы также добавим spring-boot-starter-parent как <parent> в наш pom.xml .

В качестве альтернативы основной класс можно определить как элемент mainClass модуля spring-boot-maven-plugin в разделе плагинов нашего pom.xml :

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

Пример этой конфигурации Maven можно найти на GitHub.

3. Грейдл

Если мы используем плагин Spring Boot Gradle , есть несколько конфигураций, унаследованных от org.springframework.boot , где мы можем указать наш основной класс.

В файле Gradle проекта mainClassName можно определить в блоке конфигурации springBoot . Это изменение, сделанное здесь, подхватывается задачами bootRun и bootJar :

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

В качестве альтернативы основной класс можно определить как свойство mainClassName задачи bootJar Gradle:

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

Или как атрибут манифеста задачи bootJar :

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

Обратите внимание, что основной класс, указанный в блоке конфигурации bootJar , влияет только на JAR, создаваемый самой задачей. Это изменение не влияет на поведение других задач Spring Boot Gradle, таких как bootRun .

В качестве бонуса, если к проекту применяется подключаемый модуль приложения Gradle , mainClassName можно определить как глобальное свойство:

mainClassName = 'com.foreach.DemoApplication'

Мы можем найти пример этих конфигураций Gradle на GitHub.

4. Использование командной строки

Мы также можем указать основной класс через интерфейс командной строки.

Spring Boot org.springframework.boot.loader.PropertiesLauncher поставляется с аргументом JVM, чтобы вы могли переопределить логический основной класс, называемый loader.main :

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

5. Вывод

Существует несколько способов указать точку входа в приложение Spring Boot. Важно знать, что все эти конфигурации — просто разные способы изменения манифеста файла JAR или WAR.

Примеры рабочего кода можно найти здесь и здесь .