사용자 도구

사이트 도구


gradle:task

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:task [2013/05/23 15:09]
kwon37xi [멀티 프로젝트에서 각 프로젝트 별 최신 갱신 여부 검사]
gradle:task [2018/05/31 13:45] (현재)
kwon37xi
줄 26: 줄 26:
  
 // tasks 에 추가 // tasks 에 추가
-tasks.add(name: 'hello'<< {+tasks.add(name: 'taskName', type: org.something.GradleTask, dependsOn: 'anotherTask') { 
 +    // task 설정
     println "hello"     println "hello"
 +}
 +
 +// with create
 +
 +tasks.create(name: 'taskName', type: org.something.GradleTask, dependsOn: 'anotherTask') {
 +   // task 설정
 } }
 </code> </code>
줄 33: 줄 40:
 ===== 태스크 정보 설정 ===== ===== 태스크 정보 설정 =====
   * Task의 description과 group을 지정하면 ''gradle tasks'' 시에 정보를 표시해 준다.   * Task의 description과 group을 지정하면 ''gradle tasks'' 시에 정보를 표시해 준다.
-  * group은 마음대로 정할 수 있지만, 기본적으로 ''build'' 등이 있다. +  * group은 마음대로 정할 수 있지만, 기본적으로 ''build'' 등이 있다.<code groovy>
-<code groovy>+
 dist { dist {
     description = '태스크 설명'     description = '태스크 설명'
줄 42: 줄 48:
 dist.description = '태스크 설명' dist.description = '태스크 설명'
 dist.group = '태스크의 그룹' dist.group = '태스크의 그룹'
 +</code>
 +  * 동적 프라퍼티 설정<code groovy>
 +task something {
 +    ext.prop1 = 'xxx'
 +    ext.prop2 = 'yyy'
 +}
 +// 외부에서 something.prop1 으로 접근 가능
 </code> </code>
 ===== task에 접근하기 ===== ===== task에 접근하기 =====
줄 218: 줄 231:
  
 ===== 태스크의 실행 순서 ===== ===== 태스크의 실행 순서 =====
-태스크에 ''dependsOn [a, b]'' 형태로는 실행 순서를 지정할 수 없다. dependsOn 은 의존 대상을 명시할 뿐 의존 대상의 실행순서는 명시하지 않는다. +  * 태스크에 ''dependsOn [a, b]'' 형태로는 실행 순서를 지정할 수 없다. dependsOn 은 의존 대상을 명시할 뿐 의존 대상의 실행순서는 명시하지 않는다. 
-이 때, 다음과 같은 방식으로 순서를 명확히 하는 것도 가능하다. +  * 기존방법 : 다음과 같은 방식으로 순서를 명확히 하는 것도 가능하다.<code groovy>
-<code groovy>+
 task somethingLastTask << { task somethingLastTask << {
     tasks.somethingFirstTask.execute()     tasks.somethingFirstTask.execute()
줄 228: 줄 240:
 } }
 </code> </code>
 +  * 새로운 방법(2015년 1월 현재 incubating) : <code groovy>
 +// 보통은 task1 -> task2 순서로 실행하지만 특정 상황에서는 이를 무시한다.
 +task2.shouldRunAfter task1
  
 +// 무조건 task1 -> task2 순서를 지킨다.
 +task2.mustRunAfter task1
 +</code>
 ===== tasks ===== ===== tasks =====
   * ''tasks''는 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskContainer.html|TaksContainer]]의 인스턴스이며 이는 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskCollection.html|TaskCollection]] 인터페이스를 상속한다.   * ''tasks''는 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskContainer.html|TaksContainer]]의 인스턴스이며 이는 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskCollection.html|TaskCollection]] 인터페이스를 상속한다.
   * [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskCollection.html#withType%28java.lang.Class%29|TaskCollection.withType]] ''tasks.withType(TaskType) { ... }'' 을 사용하여 특정 태스크 타입에 대한 공통 설정을 수행할 수 있다.   * [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskCollection.html#withType%28java.lang.Class%29|TaskCollection.withType]] ''tasks.withType(TaskType) { ... }'' 을 사용하여 특정 태스크 타입에 대한 공통 설정을 수행할 수 있다.
 +
 +===== UP-TO-Date upToDate 조건 =====
 +  * [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskOutputs.html#upToDateWhen%28org.gradle.api.specs.Spec%29|TaskOutputs.upToDateWhen]]을 통해 upToDate 검사 조건을 변경할 수 있다.
 +  * 태스크를 무조건 실행하게 만들고자 한다면 Up to date 검사를 안하게 만들면 된다.<code groovy>
 +
 +// 태스크 선언부에서 아래와 같은 형태를 띄게 된다.
 +
 +task someTask {
 +  outputs.upToDateWhen { false }
 +  
 +  doLast {
 +     ... 
 +  }
 +}
 +</code>
 +
 +===== --rerun-tasks =====
 +  * ''--rerun-tasks'' 옵션을 주면 up-to-date 상태와 무관하게 무조건 태스크를 실행한다.
 +
 +===== Task 실행에서 제외 =====
 +  * "aaa" 태스크 실행시 "bbb" 태스크가 의존성에 걸려있더라도 실행을 하지 않고 건너뛰게 해야하는 경우가 있다.
 +
 +<code groovy>
 +gradle.taskGraph.whenReady { taskGraph ->
 +  def tasks = taskGraph.allTasks
 +
 +  // 태스크 실행 그래프에 'aaa'가 들어있으면
 +  if (tasks.find { it.name.toLowerCase() == 'aaa'}) {
 +    bbb.enabled = false // bbb 태스크를 skip 한다. 로그상에 SKIP으로 뜸
 +  }
 +}
 +</code>
 +
 +===== 참조 =====
 +  * [[http://mrhaki.blogspot.com/2018/05/gradle-goodness-command-line-options.html|Gradle Goodness: Command Line Options For Custom Tasks - Messages from mrhaki]]
  
gradle/task.1369289393.txt.gz · 마지막으로 수정됨: 2013/05/23 15:09 저자 kwon37xi