현재 멀티 모듈로 구성된 프로젝트를 만들어 보고 있다.
그런데 최상위 프로젝트에서 build를 실행해도 생성된 jar에 특정 디렉토리 / 파일을 넣는 작업이 되지 않았다. (현재 진행형..)
아무리 AI에 물어보고 찾아봐도 나의 프로젝트 상황과 유사한 케이스가 없어서 직접 gradle의 task 단계를 확인하고 그 중간에 jar 파일에 특정 파일 / 디렉터리를 넣는 custom task를 만들어 보기로 했다. (가능하다면 말이다.)
그렇게 gradle 빌드 도구의 동작 원리에 대해서 자세히 공부해보게 되었다.
대표적인 built-in task들의 내부적인 task 실행 순서의 확인은 gradle CLI의 로그 옵션을 사용했다.
-i 옵션을 넣어서 로그를 찍어보면 "Tasks to be executed: [task들]"를 볼 수 있는데, 이 배열에 있는 첫번째 task부터 순서대로 실행되며 성공 시 다음 task로 넘어가고 실패 시 task는 종료되게 된다.
아래는 싱글 모듈 프로젝트에서 주요 built-in task들의 내부 실행 task 순서를 설명한다.
1. Clean
"clean" task는 단순히 clean task 만을 실행한다.
2. build
compileJava -> processResources -> classes -> resolveMainClassName
-> bootJar -> jar -> assemble
-> compileTestJava -> processTestResources -> testClasses -> test -> check
-> build
3. bootRun
compileJava -> processResources -> classes -> resolveMainClassName -> bootRun
4. assemble
compileJava -> processResources -> classes -> resolveMainClassName -> bootJar -> jar -> assemble
5. test
compileJava -> processResources -> classes -> compileTestJava -> processTestResources -> testClasses -> test
6. jar
compileJava -> processResources -> classes -> jar
7. bootJar
compileJava -> processResources -> classes -> resolveMainClassName -> bootJar
참고
https://docs.gradle.org/current/userguide/command_line_interface.html
'Backend > Spring' 카테고리의 다른 글
[Spring] Multi-module 프로젝트에서 테스트용 docker-compose 파일 공통화 (0) | 2025.03.11 |
---|---|
[Spring] 멀티 모듈에 Spring Rest Docs 적용기 (0) | 2025.03.03 |
[Gradle] Gradle Wrapper 개념 정리 (0) | 2025.02.08 |