spring boot 2.x + jsp +gradle 내장톰켓 셋팅하기
프로젝트 구성 개요
jsp를 쓸수밖에 없는 프로젝트에서 gradle을 이용하여 war로 build 후
java -jar app.war
를 사용하여 프로젝트를 띄울수 있게 하는것이 주 목적이다.spring boot 프로젝트러 jar패키징후 내장 톰켓을 사용하는 방식으로는 jsp 를 view template으로 사용할수 없다.
이 셋팅이 필요없는 케이스.
- 굳이 jsp를 쓰지않아도 되는 경우. war셋팅도 필요없으니 기존 jar 배포구조로 구성하면된다.
- 내장tomcat을 쓰지않는경우. war로 패키징하여 외부 톰켓을 이용하면 되므로 bootRun, bootWar셋팅까지 할 필요는 없다.
실제로는 프로젝트를 마이그레이션 하는 과정에서 발생한 트러블 슈팅 과정을 정리한 산출물입니다.
본 내용에서는 마이그레이션 과정이 아닌 셋팅만 기술하겠습니다.(결과물위주)
디렉토리 구조
1 | src.main |
jsp
를 뷰 template으로 사용하기 위해서는 src/main/webapp
페키지 아래 둔다.
빌드 환경과 의존성 셋팅
- war로 build 하기위해서
apply plugin: 'war'
를 포함시켜준다.- 이제 gradle - build 시 jar가 아닌 war로 빌드된다.
- 내장톰켓이 jsp를 실행시킬수 있도록 의존성을 추가한다
- tomcat-embed-jasper
- jstl
war
plugin을 설치하면 gradle build에서 war, bootWar를 선택할 수 있다. 이를 셋팅해준다- (선택사항) 위과정을 bootRun에서 수행하고싶다면 개발환경을 위해
bootRun
까지 셋팅해준다.main = bootWar.getMainClassName()
를 추가해주면 war를 생성해 실행해준다.
- 로컬환경 설정 변경하기 (intellij 만 해당)
- AppApplication - run으로 실행되지 않는 경우가있다
- multi module project 인경우 발생한다
- run/debug configuration > environment > Workingdirectory 를
$MODULE_WORKING_DIR$
로설정하면 해결된다.
예시
아래는 1~4에 해당하는 부분을 적용한 build.gradle
예시이다
1 | apply plugin: 'war' //setting 1 |
배포하기
bootWar
명령어를 통해 빌드- build/libs 안에 war 파일을 서버에 배포
- java -jar app.war 명령어로 실행