일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JPA
- docker mongodb install
- HHH000104
- spring filter ordering
- springboot jwt
- docker mongodb
- jvm 모델
- intern
- angular jwt
- String Constants Pool
- String Pool
- Constants pool
- install mongodb docker
- 기본 Manifest 속성이 없습니다
- spring jwt
- springboot jwt example
- springboot-angular-jwt
- filter ordering
- jwt token
- jwt example
- springboot maven plugin
- springboot mongodb config
- string comparison
- jvm 메모리 구조
- spring-boot-maven-plugin
- JWT
- jvm memory model
- jvm memory structure
- mongodb install ec2
- jpa pagination
- Today
- Total
개발블로그
spring-boot-maven-plugin (기본 manifest 속성이 없습니다 오류 해결) 본문
springboot maven project를 package 했을 때 생성되는 jar파일을 실행시키면,
"기본 manifest 속성이 없습니다"라는 오류 메시지가 나옵니다.
그 이유는 JVM이 jar파일에서 가장 처음 실행할 Main Class를 찾지 못해서 발생하는 오류입니다. 이에 대한 설정은 jar파일 내의 META-INF/MANIFEST.MF에 있어야 하는데, 등록해주지 않았기 때문에 이 오류가 발생한 것입니다.
maven이 package를 할 때, 추가적인 정보들을 MANIFEST.MF에 등록하게 하고자, pom.xml에 spring-boot-maven-plugin을 추가하겠습니다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
이 플러그인을 추가한 후, 다시 maven package를 실행하겠습니다.
그리고 jar파일에 있는 MANIFEST.MF를 확인해보면, 다음과 같이 추가적인 정보들이 등록된 것을 확인할 수 있습니다.
중점적으로 봐야할 것은 Main-Class, Start-Class, Spring-Boot-Classes, Spring-Boot-Lib입니다.
- Main-Class : Springboot application이기 때문에 Main-Class의 Value에 Springboot의 org.springframework.boot.loader.JarLauncher로 지정합니다.
- Start-Class : 어플리케이션의 MainClass를 Start-Class의 Value에 정의합니다. (만약 Springboot application이 아니라면, Main-Class의 Value에 구현한 어플리케이션의 MainClass를 정의합니다.)
- Spring-Boot-Classes : 컴파일된 class파일들이 위치한 경로를 정의합니다.
- Spring-Boot-Lib : pom.xml에 추가한 의존하고 있는 라이브러리들이 위치한 경로를 정의합니다.
사실 spring-boot-maven-plugin이 해주는 일은 단순히 MANIFEST.MF에 추가적인 정보를 등록해주는 것만은 아닙니다.
spring-boot-maven-plugin이 해주는 일 중 하나가 package할 때 의존하고 있는 라이브러리들을 추가해주는 일입니다.
첫 번째 파일은 spring-boot-maven-plugin을 사용하지 않고 package를 한 jar파일이고, 두 번째 파일은 spring-boot-maven-plugin을 사용하여 package 한 jar파일입니다. 크기 차이가 많이 난다는 것을 확인할 수 있습니다.
이는 첫 번째 jar파일은 의존하고 있는 라이브러리들이 추가되지 않은 채로 package되어 있기 때문입니다.
'Spring' 카테고리의 다른 글
fetch join with pagination :: [HHH000104: firstResult/maxResults specified with collection fetch; applying in memory] 에러 해결 (0) | 2021.01.09 |
---|---|
spring cloud api-gateway 사용하기 (0) | 2019.12.24 |
Filter Exception 처리 (0) | 2019.08.22 |
Filter Ordering (0) | 2019.08.22 |
springboot-kafka :: Error deserializing key/value (0) | 2019.06.19 |