문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
gradle:buildlifecycle [2012/10/08 17:31] kwon37xi [트리구조 구축] |
gradle:buildlifecycle [2014/08/29 14:40] (현재) kwon37xi [프로젝트 평가] |
||
---|---|---|---|
줄 93: | 줄 93: | ||
이런 식으로 작동하는 이유는 멀티 프로젝트 일 경우 모든 멀티프로젝트 빌드 구성을 생성해야하기 때문이다. '' | 이런 식으로 작동하는 이유는 멀티 프로젝트 일 경우 모든 멀티프로젝트 빌드 구성을 생성해야하기 때문이다. '' | ||
+ | 설정 파일 자동 탐색은 물리적으로 계층/ | ||
+ | |||
+ | Gradle은 빌드에 참여하는 모든 프로젝트에 대해 Project 객체를 생성한다. 각 프로젝트는 기본적으로 탑레벨 디렉토리를 '' | ||
+ | |||
+ | |||
+ | ===== 빌드 스크립트 라이프사이클에 반응하기 ===== | ||
+ | 라이프싸이클을 진행하는 동안 빌드 스크립트에서 알림을 받을 수 있다. 알림은 특별한 리스너 인터페이스를 구현하거나 혹은 알림이 발생했을 때 실행할 클로저를 제공해 주는 두가지 방식으로 구현한다. | ||
+ | |||
+ | ==== 프로젝트 평가 ==== | ||
+ | 프로젝트를 평가하기 직전과 직후에 알림을 받을 수 있다. 빌드 스크립트에서 모든 정의가 적용된 이후에 추가적인 구성을 수행할 때나 로깅 혹은 프로파일링을 하고자 할 때 사용한다. | ||
+ | |||
+ | * '' | ||
+ | allprojects { | ||
+ | afterEvaluate { project -> | ||
+ | if (project.hasTests) { | ||
+ | println " | ||
+ | project.task(' | ||
+ | println " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | * '' | ||
+ | hasTests = true | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q test | ||
+ | Adding test task to project ': | ||
+ | Running tests for project ': | ||
+ | </ | ||
+ | [[http:// | ||
+ | |||
+ | 아무 프로젝트든 평가한 뒤에 알림을 받는 것도 가능하다. '' | ||
+ | |||
+ | * 프로젝트의 성공 여부를 보여주는 '' | ||
+ | gradle.afterProject {project, projectState -> | ||
+ | if (projectState.failure) { | ||
+ | println " | ||
+ | } else { | ||
+ | println " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q test | ||
+ | Evaluation of root project ' | ||
+ | Evaluation of project ': | ||
+ | Evaluation of project ': | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | * 최상위 '' | ||
+ | project(': | ||
+ | // .... | ||
+ | } | ||
+ | </ | ||
+ | ==== 태스크 생성 ==== | ||
+ | * 프로젝트에 태스크가 추가된 직후에 알림을 받을 수 있다. 기본값을 설정하거나 태스크가 빌드에 노출되기전에 행위를 추가하고자 할 때 사용한다. | ||
+ | * 각 태스크가 생성된 뒤에 '' | ||
+ | tasks.whenTaskAdded { task -> | ||
+ | task.srcDir = ' | ||
+ | } | ||
+ | |||
+ | task a | ||
+ | |||
+ | println " | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q a | ||
+ | source dir is src/ | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== 태스크 실행 그래프가 정해진 뒤에 ==== | ||
+ | * 실행할 태스크에 '' | ||
+ | task distribution << { | ||
+ | println "We build the zip with version=$version" | ||
+ | } | ||
+ | |||
+ | task release(dependsOn: | ||
+ | println 'We release now' | ||
+ | } | ||
+ | |||
+ | gradle.taskGraph.whenReady {taskGraph -> | ||
+ | if (taskGraph.hasTask(release)) { | ||
+ | version = ' | ||
+ | } else { | ||
+ | version = ' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | ==== 태스크 실행 ==== | ||
+ | 어떤 태스크이든 실행 직전과 직후에 알림을 받을 수 있다. | ||
+ | |||
+ | * 태스크 실행과 종료를 로그로 남기는 '' | ||
+ | task ok | ||
+ | |||
+ | task broken(dependsOn: | ||
+ | throw new RuntimeException(' | ||
+ | } | ||
+ | |||
+ | gradle.taskGraph.beforeTask { Task task -> | ||
+ | println " | ||
+ | } | ||
+ | |||
+ | gradle.taskGraph.afterTask { Task task, TaskState state -> | ||
+ | if (state.failure) { | ||
+ | println " | ||
+ | } | ||
+ | else { | ||
+ | println " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q broken | ||
+ | executing task ': | ||
+ | done | ||
+ | executing task ': | ||
+ | FAILED | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||