최근에 회사에 n단계 depth에 걸친 gradle이 있어서 여러 고민에 있다
아래에 예시로 둔 프로젝트가 있다
이 상황을 가정해서 한 번 진행하고자 한다
https://github.com/progress0407/multi-module-gradle-project
task: 하나의 빌드 작업
plugin: task들이 묶여서 사용자가 편히 쓸수 있도록 한것
subprojects: 하위 모듈들 전부
allprojects: subprojects + root proejct
gradle이 maven보다 빠른 이유?
- 점진적으로 빌드함 (이전 내용을 캐싱)
- 이미 빌드한게 있으면 하지 않음
- 데몬 프로세스가 돌아가면서 캐싱
거의 모든 시나리오에서 최소 2 ~최대 100 maven보다 빠르다
implementaion: 자신을 의존하는 모듈에게만 영향
api: 자신을 의존하는 모듈과 그 모듈을 의존하는 모듈들에게도 영향
java-library plugin: 위 api 기능을 사용하려면 해당 plugin을 사용해야 한다
Gradle Daemon
Gradle 명령어를 사용하기 위한 JVM이 백그라운드 프로세스로 항상 떠 있는 것
이 덕분에 항상 빠르게 gradle 을 실행할 수 있다 (또 메모리 캐시 등으로 task 등을 캐싱한다고 한다)
Build Tool 선택: intelliJ vs Gradle
속도 상은 intelliJ가 빠른데.. 몇몇 기능이 안될수있다
프로젝트가 조금만 복잡해져도 Gradle로 가는게 좋다고 생각한다
QueryDsl 동작 이해
@Entity 혹은 @QueryProjections이 부착된 클래스 대상으로
Q Class File을 미리 컴파일하고 특정 패키지로 몰아 넣는다
그리고 해당 패키지를 참조할 수 있는 설정이 gradle script에 있다면, 해당 File들을 import할 수 있다
이런 방식으로 동작한다
Lombok 동작 이해
사실 이 부분은 잘 이해되지 않았다
class 파일로 빌드하기 전에, 미리 compile한 것처럼 보여주는 것 같다
annotation processor 부분을 이해하면 될텐데... 쉽게 이해되지 않았다
compile build 위치가 아닌, 특정 메모리 영역에 기억을 시키고 실시간으로 load하는 것처럼 보이긴 했다...
tool-chain
이 기능을 이용하면 dev-ops할때 유용하다고 바로 생각했다
프로젝트마다 다른 Java파일을 미리 설치하지 않고 그때그때 마다 실행할 수 있게 도와준다
예를 들면 프로젝트 a는 jdk 8, c는 17이면 두 jdk가 필요하지만 tool-chain 설정을 하면
미리 위 두 jdk 가 없어도 즉시 다운로드 + 세팅되어서 java 명령어를 실행할 수 있다
참고한 글들
https://techblog.woowahan.com/2637/
https://mangkyu.tistory.com/296
https://mangkyu.tistory.com/304
'Back-end > Build (Gradle, Maven)' 카테고리의 다른 글
[Test Code, Gradle] 각 모듈에 Test Fixture를 공유하고 싶을 때 (0) | 2023.12.10 |
---|---|
[생각 정리] 내가 경험했던 뼈아픈 Gradle 멀티모듈 설계 (0) | 2023.11.28 |
[Gradle] 기존의 프로젝트의 이름(group, artifact) 바꾸기 (0) | 2023.06.13 |
Gradle dependency 분리 하면서 생긴 문제, 해결 (0) | 2023.05.28 |
Gradle 멀티모듈 - 의존성을 관리하는 두 가지 방법 (0) | 2023.05.28 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!