Intellij Multi Module Project 구성하기 (with Gradle)
Intellij Multi Module Project 구성하기 (with Gradle)
멀티 모듈 구성하기 전 참고
멀티 모듈 구조가 현 상황에 도움이 되는 것이 맞는지?를 먼저 따져보아야 한다.
[!warning] 단일 프로젝트 하위 멀티 모듈로 구성하게 되면 프로젝트 사이즈가 그 만큼 커져서, 저사양 노트북에서는 프로젝트를 여는 것 만으로도 매우 버거울 수 있다. 프로젝트를 열고 IDE가 indexing 할 때 대상이 그 만큼 많아져서, CPU 100% 치고 완료 되기 까지 시간도 오래 걸린다. (맥북 Air로는 개발 하기 힘들어질 수 있음.) 전체 검색 시 검색 자체도 느리고, 관심 없는 불필요한 코드가 검색 결과로 잡힌다는 단점도 있다.
멀티 모듈 구조라면 Mono Repo 구조로
- root project 하나에, 그 하위로 sub module 여러 개를 두는 방식이 상호 import하기 좋다.
- 여러개의 sub module로 나누어서 개발하는 프로젝트라면 하나의 repository(모노레포)를 쓰는 편이 좋은데, 어떤 기능이 어디서 사용되는지 파악하기 쉽기 때문이다.
- repo가 모듈 단위로 다 나뉘어져 있으면(멀티레포) 기능 수정 할 때 이 기능이 어디서 참조되는지 찾아내기 쉽지 않다.
- 모노레포와 멀티모듈 -d2
멀티 모듈 구성하기
root build.gradle 두는 방법
- https://daddyprogrammer.org/post/13156/spring-boot-change-multi-module/
- https://velog.io/@haerong22/IntelliJ-%EB%A9%80%ED%8B%B0-%EB%AA%A8%EB%93%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0
- https://velog.io/@mu1616/java-gradle-%EB%A9%80%ED%8B%B0%EB%AA%A8%EB%93%88-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0
root build.gradle 없는 방법
- https://docs.gradle.org/current/userguide/multi_project_builds.html
- https://docs.gradle.org/current/userguide/declaring_dependencies_between_subprojects.html
[!info] 이 방법은 공통으로 쓰이는 plugin 등이 중복해서 load 된다는 단점이 있다.
큰 문제는 아니지만 root에 build.gradle을 두고 공통 설정(version 등)을 두는게 나아보인다.
gradle도 그렇게 권장하고 있는 듯 하다.
plugin의 경우apply false를 주면 모든 프로젝트에 적용되지 않고 버전만 통일 할 수 있다.
에러 정리
- plugin-request-for-plugin-already-on-the-classpath-must-not-include-a-version 에러 뜰 때
- 패키지가 다르면 jar를 disable하면 못찾는다.
- sub module 구성하면서 Intellij의 Project Structure가 꼬인 경우(없는 모듈을 잡는다거나 중복해서 잡는다거나) settings.gradle에서 rootProject.name 변경해서 다시 잡아줄 것
Gradle implementation 과 compile(api)의 차이
- common 모듈에서, import 시
implementation 'coroutine'으로 하게 되면- common 모듈을 가져다 쓰는 곳에서 어떻게 import하든, coroutine 모듈의 내용이 보이지 않는다.
- 반면 common 모듈에서
compile 'coroutine'하게 되면- common 모듈을 가져다 쓰는 곳에서 coroutine 모듈의 내용이 보인다. (따라서 별도 임포트 필요 X)
compile은 deprecated 되었고api로 바뀌었다.
[!info] 멀티 모듈 구조에서 yml은 각 모듈에서 직접 가지고 있는 형태가 좋다.
This post is licensed under CC BY 4.0 by the author.