Gradle로 프로젝트 구성하기

Gradle로 프로젝트 구성하기

Oct 25, 2018    

Gradle 사용하기

프로젝트 초기화

먼저 프로젝트를 진행할 새로운 디렉토리를 생성한다.

$ mkdir demo
$ cd demo

그리고 Gradle의 init 명령어로 새로운 프로젝트를 생성한다.

$ gradle init

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

$ ls -al
total 14
drwxr-xr-x 1 shun.shin 197121    0 Oct 25 14:29 .
drwxr-xr-x 1 shun.shin 197121    0 Oct 25 14:27 ..
drwxr-xr-x 1 shun.shin 197121    0 Oct 25 14:29 .gradle
-rw-r--r-- 1 shun.shin 197121  207 Oct 25 14:29 build.gradle
drwxr-xr-x 1 shun.shin 197121    0 Oct 25 14:29 gradle
-rwxr-xr-x 1 shun.shin 197121 5296 Oct 25 14:29 gradlew
-rw-r--r-- 1 shun.shin 197121 2260 Oct 25 14:29 gradlew.bat
-rw-r--r-- 1 shun.shin 197121  363 Oct 25 14:29 settings.gradle

init 명령어로 생성된 파일을 살펴보자

  • build.gradle: 현재 프로젝트 환경설정을 위한 Gradle build script. 프로젝트 의존성이나 플러그인 설정 등이 포함되어 있다.
  • gradle
    • wrapper: 아래 gradlew 스크립트에서 실제로 호출하는 파일이 있다.
      • gradle-wrapper.jar: Gradle wrapper executable JAR
      • gradle-wrapper.properties: Gradle wrapper 설정파일
  • gradlew: (*nix 계열 OS의) Gradle wrapper 실행 스크립트
  • gradlew.bat: Windows Gradle wrapper 실행 스크립트, gradlew와 역할은 동일하다.
  • settings.gradle: Gradle build 설정을 위한 setting 스크립트. 하위프로젝트의 관계 등의 프로젝트 구성정보가 저장되어있다.

Gradle task 명렁어

  • Build 작업
    • assemble: 프로젝트 결과물을 생성한다.
    • build: 프로젝트 결과물을 생성하고 테스트도 수행한다.
    • clean: build 디렉토리를 삭제한다
    • jar: Main 클래스를 포함하는 jar 파일을 생성한다.
  • Build setup
    • init: Gradle 프로젝트 초기화
    • wrapper: wrapper 파일 생성
  • Documentation
    • javadoc: javadoc API 문서를 생성한다.
  • Help
    • dependencies: Root 프로젝트 의존성 관계를 출력한다.
    • buildEnvironment: Root 프로젝트 빌드스크립트 의존성 관계를 출력한다.
    • projects: 하위 프로젝트 목록을 출력한다.
    • tasks: Gradle task 목록을 출력한다.
  • Verification

멀티 프로젝트 구성하기

스터디 목적으로 만드는 프로젝트라 책 이름을 그대로 하위 프로젝트 명으로 사용해보기로 한다. settings.gradle에 ‘effective-java’와 ‘spring’ 프로젝트를 추가하고, 기본 트리구조를 생성한다.

$ echo "
include 'effective-java'
include 'spring'" >> settings.gradle


$ mkdir -p effective-java/src/main/java
$ mkdir -p effective-java/src/main/resources
$ mkdir -p effective-java/src/test/java
$ mkdir -p effective-java/src/test/resources

$ mkdir -p spring/src/main/java
$ mkdir -p spring/src/main/resources
$ mkdir -p spring/src/test/java
$ mkdir -p spring/src/test/resources

그리고 각 서브 프로젝트 디렉토리에 build.gradle을 작성한다. 일단 유닛테스트를 위한 junit만 의존성 추가를 한다.

// build.gradle

apply plugin: 'java'

sourceCompatibility = 1.8

dependencies {
    testCompile 'junit:junit:4.12'
}

./gradlew build!

이제 Hello 클래스와 실패하는 테스트 케이스를 작성하고 빌드를 수행해보자.

import org.junit.Test;

import static junit.framework.TestCase.fail;

public class HelloTest {
    @Test
    public void test_Hello() {
        fail("This test will be failed.");
    }
}
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

HelloTest 클래스의 단 하나의 테스트 케이스가 항상 실패한다. 테스트 케이스를 수정해보자.

import org.junit.Test;

import static junit.framework.TestCase.assertNotNull;

public class HelloTest {
    @Test
    public void test_Hello() {
        Hello hello = new Hello();
        assertNotNull("hello is not instantiated.", hello);
        hello.main(new String[1]);
    }
}

이제 빌드가 정상적으로 수행되는 것을 확인할 수 있다.

$ ./gradlew build

BUILD SUCCESSFUL in 3s
5 actionable tasks: 2 executed, 3 up-to-date