반응형

Gradle의 task는 Gradle 프로젝트의 작업 단위 입니다. 실행 시 콘솔상에서 gradle [task명]으로 실행을 하면 됩니다. 이러한 task는 groovy 언어로 작성되어 지며 Gradle 내부에 미리 만들어져 있는 내장의 task들과 build.gradle 파일에 사용자가 정의해  사용하는 사용자 정의 task 두종류가 존재합니다. 내장된 task는 콘솔상에서 gradle tasks 명령어를 실행해 확인해 볼 수 있습니다.

콘솔 상에서 gradle 다음에 입력했던 모든 파라미터가 사실은 내장된 task였다는 것을 확인해 볼 수 있을 겁니다. (init, jar, clean, run …)
앞서 설명했듯이 gradle의 task의 모든 문법을 익히는 것은 결국 groovy 문법을 익히는 것과 같기 때문에 여기서는 아주 간단한 몇 가지 사용법만 알아보고 더욱 자세한 부분은 실제 gradle을 이용한 앞으로의 예제에서 익히도록 하겠습니다.

1. 사용자 정의 task 만들기

우리가 앞서 만들었던 java-application 타입의 HelloGradle 프로젝트의 root 디렉토리에 있는 build.gradle 파일을 열어 아래의 라인을 추가해 보도록 하겠습니다.

윈도우에 Gradle설치와 간단 Sample실행

1. Gradle이란?Gradle이란 그래들 재단과 그래들웨어라는 단체에 의해 2009년부터 개발된 빌드 도구(Bui...

blog.naver.com

저장 후 다음과 같이 실행을 해서 동작을 확인해 봅니다.

2. task 기본 사용법

task는 Gradle의 프로젝트 중 root 폴더에 존재하는 build.gradle 파일 내부에 작성되며, task를 위해 사용되는 문법은 Java와 유사한 groovy 문법이 사용됩니다.

2.1. task 기본
gradle의 task는 다음과 같은 구조로 정의 됩니다.

task 테스크명 {
  // 내용 
}

실행은 콘솔 상에서 다음과 같이 실행합니다.

PROJECT_ROOT>gradle 테스크명

2.2. doFirst와 doLast
task 내부에 우선순위의 블록을 만들고자 할 때 사용합니다. 

task 테스크명 {
   doFirst {
     // 테스크 내에서 doLast 보다 먼저 처리할 내용
   } 
   doLast {
     // 테스크 내에서 doFirst 보다 나중에 처리할 내용
   }
}

다음은 샘플입니다.

task hello {
println 'Hello gradle'
 
   doLast {
      println 'Good bye~'
   }
   doFirst {
      println 'Nice meet you.'
   }
}

샘플의 실행 결과는 다음과 같습니다.


여기서 gradle 다음에 사용된 –q는 gradle 실행 시 표시되는 진행상황을 표시하지 않겠다는 옵션입니다.
2.3. 콘솔로부터 입력 파라미터 받기
gradle로 task를 실행시킬 때 콘솔로부터 task로 입력 파라미터를 넘기는 방법은 다음과 같습니다.

PROJECT_ROOT>gradle 테스크명 –P변수명1=변수값1 –P변수명2=변수값2 … -P변수명n=변수값n

다음의 예를 작성해서 실행해 보시기 바랍니다.

task calc {
   def s= s 
   def x = x.toInteger()
   def y = y.toInteger()
 
   if (s =='+') {
      println x + '+' + y + '=' + (x+y)
   } else if (s == '-') {
      println x + '-' + y + '=' + (x-y)
   } else if (s == 'x') {
      println x + 'x' + y + '=' + (x * y)
   } else {
      println x + '/' + y + '=' + (x/y)
   }
}

샘플의 실행 결과는 다음과 같습니다.

2.4.다른 task 호출
하나 이상의 task가 존재 할 때 다른 task를 호출 할 수 있습니다.

task 태스크명 {
    // 내용
    tasks.다른태스크명.execute()
}
task 다른태스크명 {
    // 내용
}

다음은 샘플입니다.

task hello {
    println 'Hello gradle'
    
    doLast {
        println 'Good bye~'
        tasks.otherTask.execute()
    }
    doFirst {
        println 'Nice meet you.'
    }
}
 
task otherTask {
    println 'do other task'
}

실행결과 입니다.

2.5.종속성 지정
ant의 종속성과 유사한 기능으로써 하나의 task가 실행될 때 종속성이 있어 반드시 선행되어야 할 task가 있다면 종속성을 지정해 해당 task가 먼저 선행 실행된 뒤 지정된 task가 실행되게 할 수 있습니다.
사용법은 다음과 같습니다.

task 태스크명(dependsOn : ‘다른태스크명’) {
    // 내용
}
task 다른태스크명 {
    // 내용
}

또는 다음과 같은 사용도 지원합니다.

task 태스크명 {
dependsOn : ‘다른태스크명’
    // 내용
}
task 다른태스크명 {
    // 내용
}

다음은 샘플입니다.

task hello(dependsOn:'otherTask') {
    println 'Hello gradle'
    
    doLast {
        println 'Good bye~'
        tasks.otherTask.execute()
    }
    doFirst {
        println 'Nice meet you.'
    }
}
 
task otherTask {
    doLast{
       println 'do other task'
   }
}

이 태스크의 실행 결과는 다음과 같습니다.

이상입니다.

실제 task는 groovy 코드를 이용해 배포 혹은 빌드를 위한 전처리/후처리 작업등을 아주 효과적으로 사용할 수 있습니다. 보다 자세한 사항은 gradle 홈페이지의 문서 참조를 권해 드립니다.
 
감사합니다.

반응형

+ Recent posts