Gradle의 간략한 소개와 기본적인 사용법을 정리합니다.
Gradle은 오픈 소스 빌드 자동화 도구입니다.
Groovy나 Kotlin DSL로 작성된 스크립트를 빌드합니다.
안드로이드 스튜디오로 안드로이드 개발을 하다보면 한번 쯤 봤을 .gradle
파일이 여기에 해당하죠.
안드로이드의 공식 빌드 도구이기도 하고, JVM 계열의 언어(Java, Kotlin, Groovy, Scala)와 네이티브 언어(gcc, MS Visual C++, Objective-C 등)의 빌드도 지원합니다.
이번 글에서는 간단한 Java로 작성한 프로젝트를 빌드하면서 Gradle의 기본적인 사용 방법에 대해 작성해보겠습니다.
다음과 같은 환경에서 테스트했습니다.
윈도우에서도 Chocolately 같은 패키지 매니저를 통해 설치하는 방법이 있지만, 여기서는 수동으로 설치해보겠습니다.
C:\
에 gradle
디렉터리를 만들고, 여기에 압축을 푼 뒤, bin
디렉터리를 Path 환경변수에 추가했습니다.
다음 명령어로 설치가 되었는지 확인합니다.
gradle -v
init
명령어로 gradle 프로젝트를 생성합니다.
mkdir gradle-java-ex
cd gradle-java-ex
gradle init
물음에 따라 프로젝트에 맞는 답을 선택하면 기본적인 디렉터리와 파일들이 생성됩니다.
Starting a Gradle Daemon (subsequent builds will be faster)
Select type of project to generate:
1: basic
2: cpp-application
3: cpp-library
4: groovy-application
5: groovy-library
6: java-application
7: java-library
8: kotlin-application
9: kotlin-library
10: scala-library
Enter selection (default: basic) [1..10] 6
Select build script DSL:
1: groovy
2: kotlin
Enter selection (default: groovy) [1..2] 1
Select test framework:
1: junit
2: testng
3: spock
Enter selection (default: junit) [1..3] 1
Project name (default: gradle-java-ex):
Source package (default: gradle.java.ex): kr.latera.gradle_java_ex
BUILD SUCCESSFUL in 1m 29s
2 actionable tasks: 2 executed
java-application
으로 프로젝트를 초기화한 경우의 디렉터리 구조는 다음과 같습니다. [참고]
gradle-java-ex
├ .gradle // 캐시 파일
├ .settings // eclipse의 프로젝트 설정을 위한 디렉터리
├ bin // gradle에 의해 컴파일된 바이너리(Java는 .class 파일)
├ gradle // Gradle Wrapper
├ src // 프로젝트 소스 코드 디렉터리
├ .classpath
├ .gitignore
├ .project
├ build.gradle // 빌드 스크립트
├ gradlew // Gradle Wrapper를 실행하는 쉘 스크립트(for Linux, Mac OS)
├ gradlew.bat // Gradle Wrapper를 실행하는 배치 스크립트(for Window)
└ settings.gradle // 프로젝트 설정 파일
참고로 Gradle Wrapper는 빌드 환경에 설치된 Gradle이 프로젝트와 다른 버전일 경우에 프로젝트에 필요한 버전의 Gradle 바이너리를 내려받아 실행하는 방법입니다.
즉, 빌드 환경이 달라도 gradlew
혹은 gradlew.bat
만 실행하면 빌드가 가능하다는 의미죠.
간단한 코드가 프로젝트 생성과 동시에 작성돼 있지만, 몇가지를 수정해보겠습니다.
src/main/java/kr/latera/gradle_java_ex/App.java
// ...
public class App {
public int add(int x, int y) {
return x + y;
}
public static void main(String[] args) {
System.out.println(new App().add(1, 2));
}
}
테스트 코드도 수정합니다.
src/test/java/kr/latera/gradle_java_ex/AppTest.java
// ...
public class AppTest {
@Test public void testAppHasAGreeting() {
App classUnderTest = new App();
assertEquals(20, classUnderTest.add(10, 10));
assertEquals(11, classUnderTest.add(5, 7));
}
}
테스트 케이스 2개 중 첫 번째는 통과하지만 두 번째는 실패하도록 작성했습니다.
Gradle에서는 빌드와 테스트 등을 각각의 작업(task)로 나눕니다. 기본적인 작업들은 미리 정의돼 있고 필요한 경우 직접 작업을 정의할 수도 있습니다.
사용 가능한 작업은 tasks
명령으으로 확인할 수 있습니다.
gradlew.bat tasks
run
작업으로 프로젝트를 실행합니다.
gradlew.bat run
test
작업으로 유닛 테스트를 실행합니다.
gradlew.bat test
빌드 결과물은 프로젝트 디렉터리의 build
디렉터리에 생성되는데, 테스트를 실행한 경우 테스트 결과를 종합한 리포트가 build/reports
디렉터리에 생성됩니다.
index.html
파일을 웹 브라우저로 열어보면 테스트 결과와 실패한 테스트 등을 간단히 확인해 볼 수 있습니다.
Gradle의 소개와 기본적인 프로젝트 세팅 방법을 정리해봤습니다.
javac와 java 커맨드를 직접 사용해서 프로젝트를 빌드, 실행, 테스트하는 것보다 훨씬 간편하게 프로젝트를 생성하고 관리할 수 있었습니다.
Gradle은 정해진 작업 외에도 사용자가 필요한 작업을 직접 정의하고 실행할 수도 있는데, 이는 별도의 주제로 다뤄볼 수 있을 것 같습니다.