IntelliJ에서 gradle 프로젝트로 개발을 할 때 이상한 현상을 발견했다. 프로젝트 구조는 아래와 같이 멀티 모듈 구조이고, Libaray모듈이 Application 모듈에 의존성(Library -> Application)으로 설정되어 Application모듈을 실행하는 구조였다.
프로젝트 구조
- parent
- Library
- Application
Library모듈은 src/main/java 외에 src/main/resources도 포함되어 있어서 Application 모듈을 실행했을 때 모두 classpath로 참조가 가능해야하는 구조였다. 하지만 Application을 실행했을때 Application에서 Library모듈의 resources 파일들을 참조할 수 없는 에러가 발생했다. Application 실행 시 모듈별로 build디렉토리가 생성이 되어 있는 상황이었는데 Library모듈의 build 디렉토리를 보니 classes디렉토리에 .class파일만 존재하고 resources 파일은 없었다.
하지만 Gradle명령으로 Library모듈의 "build" task를 실행하면 Library모듈의 build 디렉토리에 resources 디렉토리가 잘 포함이 되었고, Application에서 Library모듈의 resources 파일들을 잘 참조해서 실행이 되었다. 그러면 Library 모듈의 resources 하위의 내용들을 수정할 때 마다 Library모듈을 Gradle 명령으로 "build", "classes" 등의 task를 실행해줘야 하는가... 이건 말이 안되는 상황이었다.
결론은 찾아보니 IntelliJ에서 실행할 때 STS의 bin디렉토리 처럼 out디렉토리가 생기고 IntelliJ에서 실행 시에는 out디렉토리를 참조하도록 하는 것이었다.
out디렉토리 설정 방법은 Preferences > Build,Execution,Deployment > Build Tools > Gradle에서 Build and run 항목에서 Gradle로 되어 있는 부분을 IntelliJ IDEA로 변경을 해준다.
위와 같이 적용을 하고 Application을 실행하니 out 디렉토리 생성되고, Library모듈의 out디렉토리를 보니 resouces 디렉토리 함께 포함되어 있었다. 그리고 Library모듈의 resources 하위의 파일들을 변경해도 Application에 바로바로 반영이 되었다.
위와 같이 적용하면 IntelliJ에서 변경하면 "out"디렉토리에 반영되어 실행되고, Gradle로 빌드를 실행하면 "build"디렉토리에 반영되는 구조가 된다.
'개발 > IntelliJ' 카테고리의 다른 글
IntelliJ JSP Dynamic Web Project 생성 (0) | 2022.08.04 |
---|---|
IntelliJ java class serialVersionUID 자동 생성 (0) | 2022.05.28 |
IntelliJ properties 파일 한글 설정 (0) | 2022.05.06 |
IntelliJ Maven profile 선택 및 실행 (0) | 2022.03.21 |
IntelliJ 검색 필터링 (1) | 2022.02.22 |
댓글