😰 상황
./gradlew bootRun으로 스프링 부트 실행할 때 동적 페이지 리소스 경로에 문제가 없었다.
하지만 heroku 배포할 때 ./gradlew bootRun으로 자바 프로젝트가 실행되는 것이 아니라 빌드된 jar 파일을 실행하여 작동한다. 이때 java -jar로 실행할 때 동적 페이지 리소스 경로에 문제가 발생하였다.
🤔 원인
./gradlew bootRun 실행과 java -jar jarPath로 실행할 때 리소스 위치가 다르다.
gradle의 경우 좀 더 유연한 기능을 제공하지만 java -jar 로 실행할 때 문제가 될 수 있다.
✅ 해결
java-spring-cafe 프로젝트 commit 중 : fix 동적 리소스 경로 에러 수정
만약 resource/index.html을 동적 리소스로 응답한다고 가정한다면
./gradlew bootRun으로 실행할 때 컨트롤러에서 경로를 "index" or "/index" 모두 문제 없이 응답해준다.
java -jar 으로 실행할 때 "/index"는 찾지 못한다. "index"만 인식한다.
mustache도 마찬가지다.
"/"를 제거해주자
📝 결론
./gradlew bootRun와 java -jar로 실행할 때 리소스 경로가 다르다.
gradle 실행이 좀 더 유연하게 처리해준다. 하지만 배포 환경이 다를 수 있으니( java -jar로 실행) 리소스 경로에 주의하자
+a) 구글 검색을 해봤지만 동일한 질문만 있고 답변이 없었다. 혹시라도 아시는 분이 계시다면 댓글 남겨주시면 감사합니다.
(classPath 차이일까?)
Reference
스택 오버플로우 : difference between gradle boot run and bootjar build in a spring boot application
'☕️ JAVA > 🍃 Spring' 카테고리의 다른 글
스프링 부트 살펴보기 / 의존성 관리 간소화, 배포 간소화, 자동 설정 (0) | 2023.06.04 |
---|---|
Maven Standard Directory Layout과 plain jar, executable jar (0) | 2022.12.28 |
Spring VS Spring Boot 몇 가지 차이점 (2) | 2022.09.23 |
Spring boot에서 H2 DB 3가지 모드 사용하기(embedded, In-Memory, Server) (0) | 2022.03.16 |
댓글