[Spring] no main manifest attribute 에러

무중단 배포를 하는 도중에 jar 파일이 실행되지 않아서 계속 heath 체크가 실패하는 문제가 발생했다.

원인을 찾고자 해당 jar 실행 로그가 들어있는 파일을 열어 봤더니 아래 로그만 덩그러니 있었다.

no main manifest attribute, in /home/ec2-user/app/deploy/mall-1.0.1-SNAPSHOT-20230927114334-plain.jar

 

이 에러는 jar파일에서 애플리케이션이 실행되는 @SpringBootApplication이 붙은 메인 클래스를 찾지 못했다는 뜻이다.

java -jar로 jar파일을 실행 시키면 JVM이 jar파일의 메인 클래스를 호출하는데 이를 찾지 못해서 발생하는 문제이다.

 

Spring boot 2.5.0 버전 이상 부터는 gradle로 빌드할 때 jar파일이 아래처럼 2개가 생성된다.

 

첫 번째 jar는 해당 프로젝트의 모든 의존성이 추가된 것이고

두 번째 plain.jar는 의존성을 제외한 프로젝트의 리소스들만 포함된 파일이다.

 

그런데 로그를 보면 plain.jar를 실행했기 때문에 메인 클래스를 찾지못하는 것이다.

 

해결 방법

해결방법은 간단하다.

build.gradle에 아래 옵션을 추가해주자.

해당 옵션을 추가해주면 plain.jar가 생성되지 않아 jar를 정상적으로 실행시킬 수 있다.

jar {
    enabled = false
}