spring boot 로 backend 모듈 개발 후 배포 시 application.yaml 파일을 수정해야 하는 상황이 발생했다.
.jar 파일 안에 있는 application.yaml 파일을 수정하는 것 보다는
당연히 아래와 같이 외부에 있는 yaml file 을 import 해서 사용하거나
spring:
profiles:
active: dev
main:
web-application-type: none
config:
import:
- optional:file:/yhkim/.conf/analyzer/00001/analyzer.yaml
- optional:file:E://yhkim/analyzer/00001/analyzer.yaml
실행 시 java -jar analyzer.jar --spring.config.name=/yhkim/.conf/analyzer/00001/analyzer.yaml 로 하는것이 더 좋으나
어쩔 수 없는 상황이 발생하여 jar 안에 있는 application.yaml 파일을 수정해 본다.
먼저 jar 파일을 풀어 본다.
jar xvf analyzer.jar
묶여 있던 jar 파일이 잘 풀린다.
BOOT-INF
META-INF
org
이렇게 3개의 디렉토리가 생긴다.
application.yaml 파일은 BOOT-INF/classes/ 안에 있다.
파일 내용을 수정하고 다시 .jar 로 묶는다.
jar cvf analyzer.jar ./
잘 묶였다.
실행해 보자.
java -jar analyzer.jar
analyzer.jar에 기본 Manifest 속성이 없습니다. |
그냥 jar 로 풀었다 묶을 경우 위와 같은 오류 메시지가 나온다.
Manifest 속성이 없다는 것은 단순히 jar 로 묶었을때 package, library 등 실행을 위한 속성/설정 정보가 있는 파일이 존재하지 않아서 발생하는 것이다.
다시 압축 풀었던 곳으로 가보면 META-INF 가 있는것이 보인다.
META-INF 가 이미 있으니 META-INF 와 함께 압축해 보자.
jar cmvf ./META-INF/MANIFEST.MF analyzer.jar ./
그리고 다시 실행해 보자. 잘 될까?
안된다.
밑줄 친 부분을 해석해 보면
"압축되고 중첩된 jar 파일은 압축하지 않고 저장해야 한다. 실행 가능한 jar 파일을 만드는데 사용된 매커니즘을 확인해 봐라" 이다.
다시 처음부터..
jar 파일을 압축해제 하지 않고 application.yaml 파일만 경로를 맞춰 작성하고 zip 으로 다시 묶어 보자.
BOOT-INF/classes/ 디렉토리를 만들고 application.yaml 파일을 복사 한 후 수정한다.
그리고 zip 으로 함께 묶는다.
zip ./analyzer.jar ./BOOT-INFO/classes/application.yaml
이제 다시 실행해 보면 성공.
'IT > Spring' 카테고리의 다른 글
OAuth 2.0: Google OAuth2 SSO (0) | 2023.07.07 |
---|---|
Spring Reactive Programming (0) | 2022.05.04 |
@Async, @Scheduled, ListenableFuture Exception handling (0) | 2022.03.28 |
Rest API Response 압축하기 (Response size 줄이기) (0) | 2022.03.17 |
No qualifying bean of type 'org.springframework.core.task.TaskExecutor' available: expected single matching bean but found 2: applicationTaskExecutor, taskScheduler (0) | 2022.03.02 |