문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
gradle:task [2013/05/21 11:17] kwon37xi |
gradle:task [2018/05/31 13:45] (현재) kwon37xi |
||
---|---|---|---|
줄 2: | 줄 2: | ||
* [[http:// | * [[http:// | ||
* 빌드 파일에는 이미 수많은 gradle 관련 패키지가 기본 import 된 상태이다. 따라서 gradle 관련 클래스 사용시 import 할 필요가 없는 경우가 많다. [[http:// | * 빌드 파일에는 이미 수많은 gradle 관련 패키지가 기본 import 된 상태이다. 따라서 gradle 관련 클래스 사용시 import 할 필요가 없는 경우가 많다. [[http:// | ||
+ | * [[http:// | ||
===== 선언 ===== | ===== 선언 ===== | ||
<code groovy> | <code groovy> | ||
줄 26: | 줄 26: | ||
// tasks 에 추가 | // tasks 에 추가 | ||
- | tasks.add(name: | + | tasks.add(name: |
+ | // task 설정 | ||
println " | println " | ||
+ | } | ||
+ | |||
+ | // with create | ||
+ | |||
+ | tasks.create(name: | ||
+ | // task 설정 | ||
} | } | ||
</ | </ | ||
줄 33: | 줄 40: | ||
===== 태스크 정보 설정 ===== | ===== 태스크 정보 설정 ===== | ||
* Task의 description과 group을 지정하면 '' | * Task의 description과 group을 지정하면 '' | ||
- | * group은 마음대로 정할 수 있지만, 기본적으로 '' | + | * group은 마음대로 정할 수 있지만, 기본적으로 '' |
- | <code groovy> | + | |
dist { | dist { | ||
description = ' | description = ' | ||
줄 42: | 줄 48: | ||
dist.description = ' | dist.description = ' | ||
dist.group = ' | dist.group = ' | ||
+ | </ | ||
+ | * 동적 프라퍼티 설정< | ||
+ | task something { | ||
+ | ext.prop1 = ' | ||
+ | ext.prop2 = ' | ||
+ | } | ||
+ | // 외부에서 something.prop1 으로 접근 가능 | ||
</ | </ | ||
===== task에 접근하기 ===== | ===== task에 접근하기 ===== | ||
줄 175: | 줄 188: | ||
* 태스크 실행후 outputs에 있는 파일의 스냅샷을 찍는다. | * 태스크 실행후 outputs에 있는 파일의 스냅샷을 찍는다. | ||
* 태스크를 재실행할 때 이전 inputs, outputs의 스냅샷과 현재 inputs와 outputs의 스냅샷을 비교하여 변경 사항이 없으면 해당 태스크를 건너뛴다. 아니면 태스크를 실행하고 모든 스냅샷을 다시 찍는다. | * 태스크를 재실행할 때 이전 inputs, outputs의 스냅샷과 현재 inputs와 outputs의 스냅샷을 비교하여 변경 사항이 없으면 해당 태스크를 건너뛴다. 아니면 태스크를 실행하고 모든 스냅샷을 다시 찍는다. | ||
+ | |||
+ | ==== 멀티 프로젝트에서 각 프로젝트 별 최신 갱신 여부 검사 ==== | ||
+ | inputs/ | ||
+ | <code groovy> | ||
+ | task checkUpToDate { | ||
+ | description = ' | ||
+ | |||
+ | def checkFile = file(new File(tmpDir, | ||
+ | |||
+ | FileTree projectFileTree = fileTree(dir: | ||
+ | projectFileTree.exclude " | ||
+ | |||
+ | inputs.files projectFileTree | ||
+ | outputs.file checkFile | ||
+ | |||
+ | doLast { | ||
+ | println " | ||
+ | if (checkFile.exists()) { | ||
+ | checkFile.delete() | ||
+ | } | ||
+ | |||
+ | checkFile.createNewFile() | ||
+ | } | ||
+ | } | ||
+ | </ | ||
===== Task Rules ===== | ===== Task Rules ===== | ||
줄 193: | 줄 231: | ||
===== 태스크의 실행 순서 ===== | ===== 태스크의 실행 순서 ===== | ||
- | 태스크에 '' | + | * 태스크에 '' |
- | 이 때, 다음과 같은 방식으로 순서를 명확히 하는 것도 가능하다. | + | * 기존방법 : 다음과 같은 방식으로 순서를 명확히 하는 것도 가능하다.< |
- | <code groovy> | + | |
task somethingLastTask << { | task somethingLastTask << { | ||
tasks.somethingFirstTask.execute() | tasks.somethingFirstTask.execute() | ||
줄 203: | 줄 240: | ||
} | } | ||
</ | </ | ||
+ | * 새로운 방법(2015년 1월 현재 incubating) : <code groovy> | ||
+ | // 보통은 task1 -> task2 순서로 실행하지만 특정 상황에서는 이를 무시한다. | ||
+ | task2.shouldRunAfter task1 | ||
+ | // 무조건 task1 -> task2 순서를 지킨다. | ||
+ | task2.mustRunAfter task1 | ||
+ | </ | ||
===== tasks ===== | ===== tasks ===== | ||
* '' | * '' | ||
* [[http:// | * [[http:// | ||
+ | |||
+ | ===== UP-TO-Date upToDate 조건 ===== | ||
+ | * [[http:// | ||
+ | * 태스크를 무조건 실행하게 만들고자 한다면 Up to date 검사를 안하게 만들면 된다.< | ||
+ | |||
+ | // 태스크 선언부에서 아래와 같은 형태를 띄게 된다. | ||
+ | |||
+ | task someTask { | ||
+ | outputs.upToDateWhen { false } | ||
+ | | ||
+ | doLast { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== --rerun-tasks ===== | ||
+ | * '' | ||
+ | |||
+ | ===== Task 실행에서 제외 ===== | ||
+ | * " | ||
+ | |||
+ | <code groovy> | ||
+ | gradle.taskGraph.whenReady { taskGraph -> | ||
+ | def tasks = taskGraph.allTasks | ||
+ | |||
+ | // 태스크 실행 그래프에 ' | ||
+ | if (tasks.find { it.name.toLowerCase() == ' | ||
+ | bbb.enabled = false // bbb 태스크를 skip 한다. 로그상에 SKIP으로 뜸 | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 참조 ===== | ||
+ | * [[http:// | ||