프로그래밍/Gradle

Gradle이란?

Lou Park 2023. 10. 14. 13:58

What’s Gradle?

Gradle은 오픈소스 빌드 자동화 도구다. 그래서…풀네임은 “Gradle Build Tool”이다. 현재 JVM용으로 가장 널리 사용되는 빌드 시스템이며, Groovy라는 빌드 스크립트 언어를 제공한다.

 

Gradle이 널리 쓰이기 이전엔 Maven이라는 빌드 도구가 있으나 확장성이나 성능적 측면에서 앞섰기 때문에 지금은 Gradle이 많이 채택되고 있다. Gradle의 이점을 공식 웹에서 조금 가져와 봤다.

 

  • 풍부한 커뮤니티 플러그인 생태계
  • 고도로 추상화된, 선언적이면서 읽고 쓰기 쉬운 빌드 로직
  • 증분 빌드(Incremental Build), 빌드 캐싱, 병렬 실행을 통한 빌드 속도 향상

 

나도 build.gradle 파일만 열면 뭐가 뭔지 몰라서 복붙만하면서 빌드가 잘 되길 기도하는게 다반사였어서 지금 제대로 공부를 해보려는차기는 하지만, Maven에 비하면 (마인크래프트 플러그인은 아직 대부분 Maven을 사용함) 훨씬 이해하기 쉽다는데에 동의한다.

 

gradle.properties

앞서 잠깐 얘기했었던 빌드 캐싱이라던가 병렬 실행을 통해서 빌드 속도의 이점을 보려면, Gradle 자체와 프로젝트의 동작을 구성하기 위한 여러 속성들을 건드려야한다. -D 옵션을 통해서 Gradle을 실행하는 JVM에 속성들을 전달 할 수 있으며, 그것들을 파일로 정리해둔게 gradle.properties다.

https://docs.gradle.org/current/userguide/build_environment.html 에 가면 여러 속성을 볼 수 있으니 필요한 부분을 정의해두면 된다.

 

Gradle Wrapper

Gradle 빌드를 실행하는데 권장되는 방법은 Gradle Wrapper를 사용하는 것이다. Wrapper는 선언된 Gradle 버전을 호출하고, 필요한 경우에 다운로드한다.

 

  • 안정적 빌드를 위해 특정 Gradle 버전에서 프로젝트를 표준화 할 수 있다.
  • 간단히 Wrapper의 정의를 변경하는 것 만으로도 Gradle 버전 관리가 가능하다.
  • 다양한 실행 환경에서도 동일한 Gradle 버전을 사용할 수 있다.

 

Python에서 호스트의 Python 버전 환경과 관련없이 프로젝트만의 독립된 환경을 제공하기 위해 Virtual Environment(venv)를 사용하는데, Gradle Wrapper의 사용도 어느정도 일맥상통하다고 볼 수 있다.

.
├── a-subproject
│   └── build.gradle.kts
├── settings.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

Gradle 프로젝트에서 Wrapper 파일은 gradle/wrapper에 위치한다. Gradle Wrapper의 버전을 변경하려면 `gradle-wrapper.properties` 에서 distructionUrl의 Gradle 버전을 변경해주면 된다.

distributionUrl=https\\://services.gradle.org/distributions/gradle-8.4-all.zip