gradle build 명령어가 실행되면 일어나는 일들

gradle build 명령어를 실행하면, Gradle 빌드 도구는 프로젝트를 빌드하기 위해 여러 작업을 수행합니다. 이 명령어는 프로젝트의 소스 코드를 컴파일하고, 테스트를 실행하고, 아티팩트를 패키징하는 등의 일련의 빌드 단계를 거칩니다.

  1. 설정 단계 (Initialization Phase)

이 단계에서는 Gradle이 빌드를 준비하는 초기 작업을 수행합니다.

  • Gradle Wrapper 실행: gradle build 명령어가 실행되면 먼저 Gradle Wrapper(gradlew)가 사용되는지 확인합니다. Gradle Wrapper는 프로젝트에 설정된 Gradle 버전을 자동으로 다운로드하고 실행하는 스크립트입니다.
  • 프로젝트 설정 로드: Gradle은 settings.gradle 파일을 읽고, 멀티-프로젝트 빌드인 경우 각 서브 프로젝트를 구성합니다. 이 파일에서 프로젝트 이름과 프로젝트 간의 관계(예: 부모-자식 프로젝트)를 정의합니다.
  1. 구성 단계 (Configuration Phase)

설정 단계가 끝나면, Gradle은 구성 단계로 넘어갑니다. 이 단계에서는 빌드 스크립트(build.gradle)를 읽고, 빌드 로직을 설정합니다.

  • 빌드 스크립트 로드: build.gradle 파일을 읽어서, 필요한 플러그인과 의존성, 그리고 빌드 스크립트에 정의된 모든 작업(Tasks)을 설정합니다. 이 과정에서 프로젝트에 정의된 모든 작업(Task)을 평가하고, 각 작업의 종속성도 구성합니다.
  • 작업 그래프 생성: 빌드에 필요한 작업들의 그래프가 생성됩니다. 이 그래프는 작업들이 어떤 순서로 실행되어야 하는지를 결정합니다. 예를 들어, 소스 코드를 컴파일하기 전에 종속성이 해결되어야 하며, 테스트는 컴파일이 완료된 후에 실행되어야 합니다.
  1. 실행 단계 (Execution Phase)

구성 단계가 완료되면 Gradle은 실제로 작업을 실행합니다.

  • 작업 실행: gradle build 명령어에 의해 요청된 작업들이 순서대로 실행됩니다. 기본적으로 build 작업은 다음과 같은 작업들로 구성될 수 있습니다:
  • clean 작업: 이전 빌드 결과를 삭제하여 새로 빌드를 시작할 수 있게 합니다. 이 작업은 명시적으로 gradle clean build 명령어를 사용했을 때 수행됩니다.
  • compileJava 작업: 자바 소스 파일을 컴파일합니다. src/main/java 디렉토리에 있는 모든 소스 파일이 대상이 됩니다.
  • processResources 작업: 리소스 파일(예: src/main/resources)을 복사하거나 처리합니다.
  • classes 작업: 컴파일된 클래스 파일들을 합칩니다.
  • test 작업: 테스트 코드를 컴파일하고, 테스트 프레임워크(예: JUnit, TestNG 등)를 사용하여 테스트를 실행합니다.
  • jar 작업: 최종적으로 컴파일된 코드와 리소스 파일들을 하나의 JAR 파일로 패키징합니다.
  • assemble 작업: 패키징된 파일들을 모아 하나의 배포 가능한 결과물을 만듭니다.
  • check 작업: 테스트와 코드 품질 검사(예: 정적 코드 분석 도구와 통합) 등을 수행합니다.
  • build 작업: assemble과 check 작업을 모두 포함하는 최종 작업입니다.
  • 의존성 관리: build.gradle에 정의된 의존성은 이 단계에서 다운로드되고 관리됩니다. Gradle은 build.gradle 파일의 dependencies 블록을 확인하여 필요한 라이브러리를 로컬 캐시 또는 원격 저장소에서 가져옵니다.

  1. 결과 출력

작업들이 모두 성공적으로 완료되면, Gradle은 빌드가 성공했음을 출력합니다. 만약 어떤 작업에서 에러가 발생하면 해당 작업은 실패로 표시되며, Gradle은 오류 메시지를 출력합니다. 기본적으로 빌드의 최종 결과는 build 디렉토리에 생성됩니다.

추가적인 정보

  • 병렬 빌드: Gradle은 여러 작업을 병렬로 실행할 수 있습니다. 이를 통해 빌드 시간을 단축할 수 있습니다.
  • 빌드 캐싱: Gradle은 동일한 입력을 가진 작업의 출력을 캐싱하여 다음 빌드에서 재사용할 수 있도록 합니다.
  • 증분 빌드: Gradle은 변경된 부분만 빌드하도록 최적화할 수 있습니다. 예를 들어, 일부 코드만 수정되었다면 전체 프로젝트를 다시 빌드하지 않고 수정된 부분만 빌드합니다.

이렇게 gradle build 명령어는 프로젝트의 소스 코드에서 최종 빌드 결과물(예: JAR 파일 또는 다른 아티팩트)을 생성하기 위해 일련의 작업들을 순차적으로 또는 병렬로 실행하는 과정을 수행합니다.

위로 스크롤