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 설정파일
- 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
- check: test 전 단계까지만 수행한다.
- test: 모든 단위 테스트를 수행한다.
멀티 프로젝트 구성하기
스터디 목적으로 만드는 프로젝트라 책 이름을 그대로 하위 프로젝트 명으로 사용해보기로 한다.
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