1. Обзор
В этом кратком руководстве представлены различные способы определения точки входа в приложение Spring Boot с помощью Maven и Gradle.
Основной класс приложения Spring Boot-это класс, содержащий метод public static void main () , который запускает Spring ApplicationContext . По умолчанию, если основной класс явно не указан, Spring будет искать его в пути к классу во время компиляции и не запустится, если ни один или несколько из них не будут найдены.
В отличие от обычных приложений Java, основной класс, обсуждаемый в этом руководстве, не отображается как свойство Main-Class metadata в META-INF/MANIFEST.MF результирующего файла JAR или WAR.
Spring Boot ожидает, что свойство артефакта Main-Class metadata будет установлено в 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
Вместо этого нам нужно определить свойство Start-Class в манифесте, которое оценивается JarLauncher для запуска приложения.
Давайте посмотрим, как мы можем управлять этим свойством с помощью Maven и Gradle.
2. Maven
Основной класс может быть определен как элемент начального класса в pom.xml раздел свойств:
com.baeldung.DemoApplication
Обратите внимание, что это свойство будет оценено только в том случае, если мы также добавим spring-boot-starter-parent как в наш pom.xml .
В качестве альтернативы, основной класс может быть определен как основной класс элемент spring-boot-maven-plugin в разделе плагинов нашего pom.xml :
org.springframework.boot spring-boot-maven-plugin com.baeldung.DemoApplication
Пример этой конфигурации Maven можно найти на GitHub.
3. Gradle
Если мы используем плагин Spring Boot Gradle , есть несколько конфигураций, унаследованных от org.springframework.boot , где мы могли бы указать наш основной класс.
В файле Gradle проекта Имя основного класса может быть определено в блоке spring Boot configuration|/. Это изменение, внесенное здесь, подхватывается boot Run и boot Jar task:
springBoot { mainClassName = 'cpm.baeldung.DemoApplication' }
В качестве альтернативы основной класс может быть определен как mainClassName собственность загрузочная банка Задача Gradle:
bootJar { mainClassName = 'cpm.baeldung.DemoApplication' }
Или как проявленный атрибут загрузочная банка задача:
bootJar { manifest { attributes 'Start-Class': 'com.baeldung.DemoApplication' } }
Обратите внимание, что основной класс, указанный в блоке конфигурации boot Jar , влияет только на JAR, который создает сама задача. Это изменение не влияет на поведение других задач Spring Boot Gradle, таких как boot Run .
В качестве бонуса, если плагин приложения Gradle применяется к проекту, имя основного класса может быть определено как глобальное свойство:
mainClassName = 'com.baeldung.DemoApplication'
Мы можем найти пример этих конфигураций Gradle на GitHub.
4. Использование CLI
Мы также можем указать основной класс через интерфейс командной строки.
Spring Boot org.springframework.boot.loader.PropertiesLauncher поставляется с аргументом JVM, позволяющим переопределить логический основной класс, называемый loader.main :
java -cp bootApp.jar -Dloader.main=com.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher
5. Заключение
Существует несколько способов указать точку входа в приложение Spring Boot. Важно знать, что все эти конфигурации-это просто разные способы изменения манифеста файла JAR или WAR.