개요
2026.03.27-[Java] Gradle 기본 개념에서 Task에 대해 언급했는데 이번 글에서 조금 더 알아보려고 한다.
Task
Task는 빌드가 수행하는 독립적인 실행 단위를 말하며, 클래스 컴파일, jar 생성, javadoc 생성 등의 작업이 해당된다.
일반적인 작업 유형은 다음과 같다
- 소스 코드 컴파일
- 테스트 실행
- 패키징 생성
- 문서 생성
- 저장소에 빌드 아티팩트 게시
각 작업은 독립적이나 다른 작업이 먼저 실행될 수 있으며, gradle은 가장 효율적인 작업 실행 순서를 파악하고 최신 상태인 작업은 건너뛴다.
Task 수행
아래 명령어로 Task를 실행시킬 수 있다.
./gradlew TASK_NAME
# 예시
./gradlew build
## 사용할 수 있는 task 확인
./gradlew tasks
## 기존 output 제거
./gradlew clean
gradle은 각 태스크가 내부적으로 의존하는 관계를 파악한 후 가장 먼저 수행해야 하는 task 순서대로 수행한다. 가령 build를 수행하면 compileJava, testm jar 등도 함께 수행한다.

Task 종류
gradle은 다양한 태스크를 가지고 있다. 이 글에서는 대표적인 태스크만 정리한다.
build
애플리케이션 소스코드를 실행화하는 task로, 라이브러리 의존성 확인, 리소스 파일 패키징, 소스 코드 컴파일, 테스트 코드 수행 등을 수행하여 산출물인 apk 파일을 생성한다. 태스크가 성공적으로 완료되었다면 모든 테스트를 통과하여 애플리케이션이 생성되었음을 의미한다. 그리고 프로젝트의 build 디렉터리에 수행 결과를 생성한다.

- classes : java 소스 파일에 대해 컴파일러를 실행한 결과인 컴파일된 .class 파일을 포함한다.
- libs : 생성된 jar 파일, 실행 또는 게시할 수 있도록 컴파일된 클래스가 포함된 아카이브를 저장한다.
- reports : 테스트 결과를 요약한 HTML 보고서를 포함한다.
gradle은 기본적으로 재빌드 시 이전 빌드와 비교하여 재빌드가 필요한 부분만 판단하여 빌드하는 증분 빌드를 지향한다. 이때 필요한 부분만 빌드할 수 있도록 캐싱하는 것을 빌드 캐시라고 한다.
clean
build를 통해 생성된 모든 아티팩트를 포함해 빌드 캐시, gradle 디렉터리 등 산출물을 삭제하여 프로젝트를 초기 빌드 상태로 되돌린다. 캐시 된 데이터가 많은 경우에는 캐시 데이터를 불러오는 시간이 디스크 저장 데이터를 불러오는 시간보다 길어질 수 있어 전체 빌드 시간이 증가할 수 있다. 또한 디스크 공간 부족으로 빌드가 실패할 수 있기 때문에 clean 태스크를 통해 빌드 시간을 단축하고 안정성을 올릴 수 있다.
test
프로젝트에 구현된 단위 테스트를 실행한다. 기본적으로 모든 단위 테스트를 수행하는데, 옵션을 통해 특정 테스트만 수행할 수도 있다.
# 특정 하위프로젝트 전체 TestCase 수행
./gradlew <module>:testDebugUnitTest
# 특정 패키지에 대한 TestCase 수행
./gradlew <module>:testDebugUnitTest --tests "<package>.*"
# 특정 TestCase만 수행
./gradlew <module>:testDebugUnitTest --tests "<package>.<test_name>"
dependencies
프로젝트에서 사용하는 라이브러리에 대한 의존성 트리를 확인할 수 있다.
./gradlew dependencies
./gradlew <module>:dependencies

gradle에서는 하나의 라이브러리에 대해 서로 다른 버전을 사용할 때 발생하는데, gradle은 사용자가 어떤 버전을 사용할 지 알 수 없기 때문에 에러 메시지를 출력한다. 이때 사용자가 의존성 트리를 활용해 문제가 되는 라이브러리를 찾아 해결하는 방식으로 활용할 수 있다.
참고 문서
[Android] Gradle Task 종류 및 사용법