본문 바로가기
Languages

Spring Boot에서 Main Class가 2개 일 때 빌드 하기

by lucidiz 2023. 4. 4.
반응형

가끔 spring boot 프로젝트에서 Main Class가 2개인지 모르고 빌드하다 보면 에러를 만나게 됩니다.

이런 경우 대응방법을 설명드리도록 하겠습니다.

 

Spring Boot 애플리케이션에서 Main Class가 2개인 경우, 빌드할 때 어떤 Main Class를 사용할지 지정해주어야 합니다. 이를 위해서는 Maven 또는 Gradle 빌드 도구를 사용하여 설정 파일을 수정해주어야 합니다.

1. Maven 사용 시


Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 설정을 추가합니다.

 

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.example.Application1</mainClass>
                    </configuration>
                </execution>
                <execution>
                    <id>repackage2</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.example.Application2</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

 

'spring-boot-maven-plugin' 플러그인을 사용하여 repackage 명령을 실행합니다. 이 때, 'mainClass' 속성을 사용하여 어떤 Main Class를 사용할지 지정해 줍니다. 'execution' 요소를 사용하여 'repackage' 명령을 두 번 실행하고, 각각의 'mainClass' 속성에 적절한 Main Class를 지정해 줍니다.


2. Gradle 사용 시


Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 설정을 추가합니다. 정의 경우, Kotlin과 함께 Gradle을 사용해줘서 build.gradle.kts에서 설정해 주고 빌드하였습니다.

 

bootJar {
    mainClassName = 'com.example.Application1'
}

task bootJar2(type: BootJar) {
    mainClassName = 'com.example.Application2'
}

 

'bootJar' 태스크에 mainClassName 속성을 사용하여 어떤 Main Class를 사용할 지 지정해 줍니다. 또한, 'task' 요소를 사용하여 'bootJar' 태스크와 비슷한 'bootJar2' 태스크를 추가하고, mainClassName 속성에 적절한 Main Class를 지정해 줍니다.

위와 같이 Maven 또는 Gradle 설정 파일에서 Main Class를 지정해주면, 빌드 시 지정한 Main Class를 사용하여 애플리케이션을 실행할 수 있습니다.

 

또는 다음과 같은 방법으로도 빌드 시 지정한 Main Class를 사용하여 애플리케이션을 실행할 수 있습니다.

springBoot {
	mainClass.set("com.bluebox.be.flashcard.FlashcardBackEndApplication")
}
 

이렇게 설정이 끝났으면 빌드를 수행하겠습니다. 저는 IntelliJ 도구를 사용하였기에 다음과 같이 빌드를 하였습니다.

IntelliJ에서 Gradle 탭에서 build> bootjar 선택 후 실행하면 build> libs 폴더 하위에 jar파일 생성됩니다. 그 파일을 서버에서 실행하시면 됩니다.

IntelliJ 에서 Bootjar로 빌드하기 - bootjar 선택 후, 실행하기 build> libs에 jar

 

또 다른 방법으로는 gradlew.bat 파일을 실행하여 빌드를 할 수 있습니다.

 

> cd 프로젝트 폴더
> gradlew.bat
> gradlew build
 

 

반응형