이글은 오늘 아침에 공부한 그레이들의 내용을 정리한 글이다. 금일 오전에는 그레이들의 빌드 라이프 사이클과 그루비가 어떤 것인지 약간의 맛보기 형식으로 공부를 진행하였다. 그러면 정리하는 글을 적어보고자 한다.
그레이들의 빌드가 본격적으로 실행되는 단계가 그레이들의 초기화 단계인데, 이 스크립트 초기화단계부터 태스크 실행단계 까지를 그레이들에서는 하나의 생명주기(Life Cycle)로 나누어 정의한다.
그레이들의 생명주기( Life Cycle)
스크립트 초기화 단계 - 그레이들의 스크립트 파일을 읽거나 그레이들의 도메인 객체가 생성되는 단계
- Script 파일 확인 및 읽기
- 멀티 or 싱글 프로젝트 판단
- Proejct 객체 생성
- 명령어 옵션 및 인수 설정
프로젝트 설정 단계 - 프로젝트를 빌드하기 위해 필요한 정보 및 자원들에 대한 설정이 이루어지는 단계
- 참조 중인 라이브러리를 확인
- Task객체 및 태스크 그래프 생성
태스크 실행 단계 - 그래프에서 대상이 되는 태스크를 확인하여 빌드를 실행
- 태스크 추출
- 태스크 실행
그레이들 스크립트 |
그레이들 기본객체 |
초기화 스크립트(init script) |
gradle 객체 |
설정 스크립트(setting script) |
Settings 객체 |
빌드 스크립트(build script) |
Proejct객체 |
위의 라이프사이클의 설명을 보면 그레이들의 경우 스크립트를 참조하여 빌드를 진행하는 것으로 보인다. 그레이들에서 사용하는 그레이들 스크립트의 특징은 아래와 같다.
- 그레이들은 그루비를 기반으로 한다.
- 그레이들의 스크립트 파일에는 그루비 문법을 기반으로 한 스크립트 코드를 작성하게 된다.
- 그레이들의 스크립트 파일 구조를 이해하려면 그루비와 해당 문법에 대한 이해가 있어야 한다.
즉, 그레이들은 그레이들 스크립트를 참조하여 빌드를 수행하는데, 이러한 그레이들 스크립트를 작성하거나 읽으려면 그루비에 대한 어느정도의 기초 지식이 필요한 것으로 보인다. 그러면 책에 나와있는 그루비의 기본 특징에 대해 살펴보고자 한다.
그루비(Groovy)
- 그루비는 JVM에서 동작하는 JVM 언어중 하나로 DSL(Domain Specific Lanugage)에 의한 확장성이 좋은 언어라고 할 수 있다.
- 자바처럼 소스코드를 컴파일하여 클래스를 생성할 수도 있으며 컴파일을 거치지 않고 직접 실행할 수 있어 스크립트처럼 사용할 수 있다.
- 그루비 문법이 자바와 호환된다.(자바코드를 그대로 그루비 코드로 활용할 수 있다.)
- 자바 라이브러리를 호출할 수 있으며 자바에서 그루비로 작성한 라이브러리를 호출할 수 있다.
1) def형 사용
// 자바와 같이 형 지정
String id = 'gradle'
// 형지정 생략
def id = 'gradle'
println id.toUpperCase() // 속성 참조 가능
2) 문자열 사용
def id = "ID : ${project.id}"
String id = "ID : $id" // {} 생략 가능
def id = '''gradle
Groovey
script'''
def id = """gradle
Groovy
script"""
3) 괄호의 생략
// 생략 가능한 경우
println('hello')
println 'hello'
4) 클로저의 사용
클로저는 아래와 같이 {}로 지정된 부분이 클로저이다. 클로저는 중괄호를 이용하여 정의하고 해당 클로저를 call()속성이나 일반 메서드처럼 호출하여 실행할 수 있따.
// task 정의 시 클로저
task hello <<< {
println 'Hello'
}
// 클로저 사용
def id = { closer -> println "id, $closer"}
// call()
id.call('gradle')
//일반 메서드 호출 방식 사용
id('gradle')
// 괄호를 생략하고 사용
id 'gradle'
5) 명령문
명령문뒤에 세미콜론(;) 생략이 가능하다.
6) 리스트와 맵
def id = ['gradle', 'Groovy']
id[1] = 'script'
assert id[1]=='script'
def id = ['a':'grade', 'b':'Groovy']
assert id['a'] == 'grade'
7) 비교
그루비는 ==를 이용해 문자열 등을 비교하나, 객체가 같은지 비교하려면 is()를 사용하여 비교한다.
그레이들 스크립트
그레이들의 스크립트는 그루비 스크립트라고 할 수 있다. 그레이들의 스크립트 파일은 두가지 요소로 구성되어 있는데, 처리문 영역과 스크립트 블록 영역이다.
// 처리문
def id = 'gradle'
// 스크립트 블록
repositories{
mavenCentral()
}
task idCheck<<{
def id='check'
println 'id : ' + id
}
스크립트 블록 |
주요 내용 |
repositories |
저장소 설정 |
dependencies |
의존 관계 설정 |
builtscript |
빌드 스크립트 클래스 패스 설정 |
initscript |
초기화 스크립트 설정 |
configurations |
환경 구성 설정 |
allprojects |
서브 프로젝트 포함 전체 프로젝트 설정 |
subprojects |
서브 프로젝트 설정 |
artifacts |
빌드 결과에 대한 설정 |
[ 그레이들의 주요 스크립트 블록 ]
변수 |
설명 |
사용범위 |
지역 변수 |
선언된 부분에서 영향력 있는 변수 |
그레이들의 모든 스크립트 파일 |
시스템 속성 |
시스템 관련 정보를 저장하는 변수 |
|
확장 속성 |
도메인 객체 확장 용도로 사용하는 변수 |
|
프로젝트 속성 |
프로젝트에서 사용하는 변수 |
빌드 스크립트 |
[ 그레이들의 변수 ]
오늘 공부한 내용을 두서없이 적어보았다. 이 외에도 build.gradle과 gradle.properties를 이용하여 간단한 예제를 작성하는 샘플코드를 작성하며 실습을 해보았지만, 이 포스팅과 안맞는다고 생각하여 적지 않기로 하겠다.
'IT > Gradle' 카테고리의 다른 글
그레이들(Gradle) Project 객체 (0) | 2020.05.10 |
---|---|
그레이들과 빌드 (0) | 2020.05.07 |
그레이들 vs 메이븐 (0) | 2020.05.06 |
Gradle 공부의 시작(Gradle 설치) (0) | 2020.05.05 |