스프링 부트 : 메인 클래스 구성

1. 개요

이 빠른 자습서는 Maven 및 Gradle을 통해 Spring Boot 애플리케이션에 대한 진입 점을 정의하는 다양한 방법을 제공합니다.

Spring Boot 애플리케이션의 메인 클래스는 Spring ApplicationContext 를 시작 하는 public static void main () 메소드를 포함하는 클래스입니다 . 기본적으로 메인 클래스가 명시 적으로 지정되지 않은 경우 Spring은 컴파일 타임에 클래스 경로에서 하나를 검색하고 하나 또는 여러 개가 발견되지 않으면 시작하지 못합니다.

기존 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. 메이븐

기본 클래스는 pom.xml 의 속성 섹션 에서 시작 클래스 요소 로 정의 할 수 있습니다 .

  com.baeldung.DemoApplication  

참고 우리는 또한 스프링 부팅 스타터 부모를 추가 할 경우이 속성은 평가 될 것 으로우리의 pom.xml 파일 .

또는 메인 클래스를 pom.xml 의 플러그인 섹션에서 spring-boot-maven-pluginmainClass 요소 로 정의 할 수 있습니다 .

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

이 Maven 구성의 예는 GitHub에서 찾을 수 있습니다.

3. Gradle

Spring Boot Gradle 플러그인을 사용하는 경우 org.springframework.boot 에서 상속 된 몇 가지 구성이 있으며 여기서 메인 클래스를 지정할 수 있습니다.

프로젝트의 Gradle 파일에서 mainClassNamespringBoot 구성 블록 내에 정의 될 수 있습니다 . 여기서 변경된 사항은 bootRunbootJar 작업에 의해 선택됩니다 .

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

또는 기본 클래스 를 bootJar Gradle 작업 의 mainClassName 속성 으로 정의 할 수 있습니다 .

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

또는 bootJar 작업 의 매니페스트 속성으로 :

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

bootJar 구성 블록에 지정된 기본 클래스 는 작업 자체가 생성하는 JAR에만 영향을줍니다. 변경 사항은 bootRun 과 같은 다른 Spring Boot Gradle 작업의 동작에 영향을주지 않습니다 .

보너스로 Gradle 애플리케이션 플러그인 이 프로젝트에 적용되면 mainClassName 을 전역 속성으로 정의 할 수 있습니다.

mainClassName = 'com.baeldung.DemoApplication' 

GitHub에서 이러한 Gradle 구성의 예를 찾을 수 있습니다.

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. 결론

Spring Boot 애플리케이션에 대한 진입 점을 지정하는 방법은 여러 가지가 있습니다. 이러한 모든 구성은 JAR 또는 WAR 파일의 매니페스트를 수정하는 다른 방법이라는 것을 아는 것이 중요합니다.

작동 코드 예제는 여기와 여기에서 찾을 수 있습니다.