본문 바로가기

Gradle과 Gradlew 그리고 Gradlew 동작 과정

@우잉_2025. 4. 30. 23:07

요약 (Gradle과 Gradlew 차이점)

항목 Gradle Gradle Wrapper (gradlew)
정의 빌드 도구 Gradle을 자동 설치하고 실행하는 스크립트
설치 여부 시스템에 설치해야함 Gradlew이 필요시 직접 다운로드
실행 대상 시스템에 설치된 gradle 실행 프로젝트 디렉토리의 gradlew파일들

Gradle이란?

Gradle은 빌드 스크립트를 기반으로 소프트웨어의 빌드, 테스트, 배포를 자동화하는 빌드 도구이다.
  • 지원 언어 및 프레임워크
    • Android, Java, Kotlin, Groovy, Scala, JS, C/C++
  • 호환 IDE
    • Android studio, IntelliJ, Visual Studio Code, Eclipse, NetBeans등 주요 IDE
    • 터미널에서도 Gradle을 호출할 수 있다.

Gradle의 핵심 개념

프로젝트

  • 빌드할 애플리케이션이나 라이브러리, 프로젝트 등 빌드 가능한 단위를 말한다.
  • 단일 프로젝트 빌드에는 루트 프로젝트 하나만 존재한다.
  • 다중 프로젝트 빌드에는 하나의 루트 프로젝트와 여러 개의 하위 프로젝트가 포함된다.
  • settings.gradle로 프로젝트를 정의하고, 각 프로젝트는 독립적인 빌드 스크립트(build.gradle)를 가질 수 있다.

빌드 스크립트

  • 프로젝트를 빌드하기 위해 거쳐야 하는 단계를 정의하는 스크립트
  • 각 프로젝트에는 하나 이상의 빌드 스크립트가 포함된다.
  • build.gradle, builde.gradle.kts 파일을 말하며, 플러그인, 종속성, 작업(Task)를 정의한다.

종속성 및 종속성 관리

  • 종속성: 프로젝트가 컴파일시 필요로 하는 외부 라이브러리
  • 종속성 관리: 프로젝트에 필요한 종속성(외부 리소스)를 선언하고 해결하기 위한 자동화된 기술
    • Maven Central, JCenter 혹은 AWS EMR 아티팩트 레포지토리 등에서 다운로드하여 컴파일러와 런타임이 사용할 수 있도록 함
    • 빌드 스크립트에서 repositories 하위에 사용할 종속성 저장소를 명시하고, dependencies에 사용할 종속성을 명시함

작업

  • Gradle이 실행 가능한 단위 작업을 말한다. ex) 빌드, 테스트 등
  • 하나 이상의 작업을 포함하며, 커스텀 작업도 선언 가능하다

플러그인

  • Gradle의 기능을 확장하는 모듈로 프로젝트에 작업을 추가한다.

Gradle 프로젝트 구조

Gradle 프로젝트 구조

  1. 래퍼 파일 등을 저장하는 Gradle 디렉토리
  2. 종속성 관리를 위한 Gradle 버전 카탈로그
  3. Gradle 래퍼 스크립트 (아래에 자세히 설명할 예정)
  4. 프로젝트 구조 정의 (루트 프로젝트 이름, 서브 프로젝트 정의 등)
  5. 빌드 스크립트
  6. 소스 코드 디렉토리

버전 카탈로그?

Gradle 7부터 등장한 기능으로 .toml확장자 파일에 의존성 버전을 명시하는데 사용된다.

빌드 스크립트에서 참조할 수 있는 종속성 목록으로 종속성 관리를 간소화한다.

 

빌드 스크립트에서 종속성을 정의할때 아래와 같이 정의하고

dependencies {
    implementation(libs.groovy.core)
}

libs.versions.toml파일에 아래와 같이 정의할 수 있다.

[libraries]
groovy-core = { group = "org.codehaus.groovy", name = "groovy", version = "3.0.5" }

Gradlew란?

Gradle Wrapper에 선언된 Gradle 버전을 호출하고, 필요의 경우 미리 다운로드하는 스크립트이다.

Gradlew을 사용하면, Gradle이 설치되어 있지 않은 환경에서도 빌드할 수 있으며, 다양한 환경에서도 같은 버전의 Gradle로 실행할 수 있다.

장점

  • 다양한 환경에서 일관된 Gradle버전 사용 가능 (일관성)
  • gradle-wrapper.properties에서 버전 변경만으로 쉽게 gradle 버전 변경 가능
  • 시스템에 gradle 설치 없이 gradle 사용 가능

Gradle Wrapper 구성 요소

gradle-wrapper.jar

  • Gradle Wrapper의 핵심 코드가 포함된 Wrapper JAR 파일

gradle-wrapper.properties

  • Wrapper 런타임 동작을 구성하는 속성 파일
  • Gradlew 어떤 버전을, 어디에 다운로드할지 설정

gradlew, gradlew.bat

  • Wrapper로 실행하기 위한 셸 스크립트와 배치 스크립트
  • 내부적으로 gradle-wrapper.properties를 참조하여 Gradle버전을 자동으로 다운로드 하고 실행함

Gradle Wrapper 사용

Gradle Wrapper 추가

Wrapper 파일을 생성해야하며 생성하려면 시스템에 Gradle이 설치되어있어야한다.

# 최신 버전 설치
gradle wrapper
# 버전 명시
gradle wrapper --gradle-version {gradleVersion}

프로젝트 루트 경로에서 해당 명령어를 실행하면, Wrapper와 관련한 파일들이 생성된다. 

Gradle Wrapper 사용

gradlew이 설치되어있는 프로젝트에서 gradlew 혹은 gradlew.bat파일이 설치된 경로에 터미널에서 아래의 명령어를 입력하면 된다.

# 배치파일 직접 실행
gradlew.bat {task명}

# 스크립트 직접 실행
./gradlew {task명}

Gradle Wrapper 버전 변경

수동으로 변경하는 방법

  • gradle-wrapper.properties파일에서 distributionUrl 속성을 직접 수정하면 된다.
distributionUrl=https\://services.gradle.org/distributions/gradle-{사용할 버전}-bin.zip

명령어로 변경하는 방법

  • gradlew 파일이 있는 경로에서 해당 명령 호출
# 배치파일 직접 실행
gradlew.bat --gradle-version {사용할 버전}

# 스크립트 직접 실행
./gradlew --gradle-version {사용할 버전}

References

https://docs.gradle.org/current/userguide/gradle_basics.html

https://docs.gradle.org/current/userguide/gradle_wrapper.html

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.wrapper.Wrapper.html#content

 

'CS' 카테고리의 다른 글

[JAVA] 배열(Array) 개념과 Arrays사용방법 정리  (0) 2025.03.21
정규화와 반정규화(비정규화)란?  (1) 2025.03.17
OSI 7계층과 계층별 역할  (1) 2025.01.19
JWT와 사용 전략  (1) 2024.08.27
[자료구조] AVL트리 [JAVA]  (0) 2020.08.30
목차