티스토리 뷰


퍼옴: https://slipp.net/wiki/pages/viewpage.action?pageId=12189700

Gradle 빌드 라이프사이클



Gradle 빌드 툴은 기본적인 라이프사이클을 제공하지 않는다. 이 점이 메이븐 빌드 툴과의 가장 큰 차이점이다. 메이븐 빌드 툴은 빌드 설정 파일이 상속 개념이다. 따라서 부모(parent) 설정 파일에서 제공하는 기본 라이프사이클을 그대로 상속받는 구조이다. 객체 지향 프로그래밍에서의 상속과 똑같은 개념이다. 상속이 좋은 점도 많지만 부모의 속성과 행위를 규정함으로써 강제하는 부분이 많다. 따라서 객체 지향 프로그래밍에서도 상속보다는 구성(composition)을 사용하는 유연한 설계를 할 수 있다고 안내하고 있다.

Gradle 빌드 툴은 메이븐이 가지는 빌드 스크립트의 상속 문제를 해결하기 위해 구성을 통한 확장을 선택했다. 이 구성을 통한 확장의 핵심에 plugin이 있다. Gradle의 기본 설정에는 빌드 라이프사이클이 존재하지 않는다. 하지만 "apply plugin: 'java'" 와 같이 java plugin을 사용하도록 설정하는 순간 자바 프로젝트에 대한 빌드 라이프사이클 추가된다.

자바 프로젝트를 빌드하는 기본 과정을 유추해보면 다음과 같다.

  • production java 코드(src/main/java 소스 코드)를 컴파일 한다.
  • production resources(src/main/resources 자원)을 컴파일 output 디렉토리에 복사한다.
  • test java 코드(src/test/java 소스 코드)를 컴파일 한다.
  • test resources(src/test/resources 자원)을 test 코드 컴파일 output 디렉토리에 복사한다.
  • test 소스 코드를 실행해 테스트를 진행한다.
자바 프로젝트를 컴파일하고 테스트하는 과정을 살펴보면 위와 같다. Gradle 빌드 스크립트에 java plugin을 추가하면 자바 프로젝트를 빌드하기 위한 여러 개의 task가 추가된다. 여러 개의 task는 서로 간의 의존관계를 맺으면서 자바 프로젝트에 대한 빌드 라이프사이클을 추가한다. java plugin task간의 의존관계를 살펴보면 다음과 같다.

앞에서 생성한 slipp 프로젝트에서 "gradle test"를 실행하면 다음과 같은 결과를 얻을 수 있다.

D:\gradle-workspace\slipp>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
 
BUILD SUCCESSFUL
 
Total time: 2.094 secs
D:\gradle-workspace\slipp>

앞의 그림에서 의존관계를 맺고 있는 task가 먼저 실행되고 마지막에 test task가 실행되는 것을 확인할 수 있다. 이와 같이 Gradle은 plugin을 추가하면서 빌드에 필요한 task가 추가될 뿐만 아니라 task간의 의존관계까지 설정함으로써 빌드 작업을 수월하게할 수 있도록 지원한다.



댓글
공지사항
최근에 올라온 글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함