Spring Boot 단독실행시 no main manifest attribute 에러 해결

작성: 2022.04.26

수정: 2022.04.26

읽는시간: 00 분

Development/Daily Error

반응형

Intro

1

no main manifest attribute, in 에러 발생

지금까지는 외장 톰캣을 이용해서 어플리케이션을 배포 해 왔습니다. 하지만 스프링부트는 내장 톰캣을 가지고 있기 때문에 단독실행이 가능한데요, 단독 실행 했을때와 외장 톰캣으로 띄웠을때 각각의 성능 및 부하 테스트를 진행 해 보고 더 나은 방향으로 진행하기로 하여 기존에 만들어둔 war 파일을 바로 실행 해 보았습니다.

문제

그런데 기대와는 다르게 manifest 관련 에러가 발생 했는데요, 복잡한 문제는 아니지만 생각보다 검색했을 때 뚜렷한 해법을 찾기가 어려웠기 떄문에 글로 남겨 보려고 합니다

image-20220426171432974

실행이 안되는 상황의 war 패키지 내 트리 구조

원인

말그대로 manifest 파일을 찾지 못했기 때문입니다. jar 혹은 war파일을 실행 가능하게 만들면 META-INF/MANIFEST.MF 파일이 있어야 하는데요, 스프링 부트 메이븐 플러그인을 사용하면 직접 작성하지 않아도 됩니다. 사실 위의 경로를 보면 필요한 경로에 필요한 파일이 존재 하는데도 찾지 못한다는 에러가 나오고 있네요.

해결

pom.xml 에서 아래와 같이 작성 해 두었었는데요

<build>
    <finalName>adm</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    ...
    <plugins>
</build>

before

즉시 실행 가능하게 빌드하도록 configuration <skip>true 부분을 제거해 줍니다.

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

after

이제 다시 Maven 으로 빌드를 해 봅니다.

image-20220426170945576

이번에는 특이하게 adm.war 파일과 adm.war.original 파일 이렇게 두개가 따로 생성되었습니다.

image-20220426171218509

확인 해 보니 트리 구조가 살짝 달라졌습니다. /org/springframework/boot/loader/ 가 추가되었고, WEB-INF 하위에 lib-provided도 추가 되었습니다.

이제 단독 실행이 될까요?

java -jar ./adm.war

image-20220426171716090

이제 정상적으로 단독실행이 됩니다.

반응형