본문 바로가기
☕️ JAVA/🍃 Spring

./gradlew bootRun vs java -jar로 실행할 때의 차이점 (리소스 경로)

by kukim 2022. 3. 19.

😰 상황

./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도 마찬가지다.

"/"를 제거해주자

 

java-spring-cafe 프로젝트 commit 중 : fix 동적 리소스 경로 에러 수정

 

📝 결론

./gradlew bootRun와 java -jar로 실행할 때 리소스 경로가 다르다.

gradle 실행이 좀 더 유연하게 처리해준다. 하지만 배포 환경이 다를 수 있으니( java -jar로 실행) 리소스 경로에 주의하자

 

+a) 구글 검색을 해봤지만 동일한 질문만 있고 답변이 없었다. 혹시라도 아시는 분이 계시다면 댓글 남겨주시면 감사합니다.

(classPath 차이일까?)


Reference

스택 오버플로우 : difference between gradle boot run and bootjar build in a spring boot application

 

댓글