사용자 도구

사이트 도구


gradle:customtask

문서의 이전 판입니다!


Gradle Custom Task

Gradle은 두가지 타입의 태스크를 지원한다. 하나는 간단한 태스크로 액션 클로저를 사용해 정의한다. 가장 기본적인 형태이다. 이 타입의 태스크는 클로저에 태스크의 행위를 기술한다. 빌드 스크립트에서 단 한 번만 쓸법한 태스크를 구현할 때 좋다.

다른 타입은 “확장(enhanced) 태스크”로 행위를 태스크에 모두 내장시키고 그 태스크를 설정할 수 있는 프라퍼티들을 제공해준다. Gradle Task 에서 살펴보았다. 대부분의 Gradle 플러그인은 확장 태스크를 사용한다. 확장 태스크는 간단한 태스크에서 처럼 태스크의 행위를 구현할 필요가 없다. 단지 태스크를 선언하고 태스크 프라퍼티를 설정해주면 된다. 이 방법은 여러 서로 다른 곳에서 서로 다를 빌드에서 행위를 재사용할 수 있게 해준다.

확장 태스크의 행위와 프라퍼티는 태스크 클래스로 정의된다. 확장 태스크를 선언할 때는 타입 혹은 태스크의 클래스를 명시한다.

사용자 정의 태스크를 구현하는 것은 쉽다. 원하는 어떤 언어로든지 사용자 정의 태스크를 구현하고 바이트코드로 컴파일해서 제공하기만 하면 된다. 그래도 Gradle API가 Groovy에 맞춰져 있으므로 Groovy로 만드는 것이 제일 편할 것이다.

태스크 클래스 패키징

빌드 스크립트

빌드 스크립트 안에서 클래스를 만들어 구현한다. 자동으로 컴파일되어 클래스패스에 추가된다. 태스크 클래스를 정의한 빌드 스크립트에서만 사용가능하다.

buildSrc 프로젝트

추천하는 방식.

Gradle Organizing Build Logic에 나온 buildSrc 프로젝트에 넣는다. rootProjectDir/buildSrc/src/main/groovy 디렉토리 아래에 넣는 것이다. Gradle이 자동으로 컴파일, 테스트, 클래스패스 추가를 해준다.

이렇게 할 경우 모든 프로젝트의 빌드스크립트에서 태스크 클래스를 사용할 수 있다. 빌드 자체의 외부에는 노출되지 않는다.

독립 프로젝트

태스크 클래스용 독립 프로젝트를 만들고 jar로 묶어서 배포한다.

간단한 사용자 정의 태스크 클래스 만들기

DefaultTask를 상속하여 구현한다.

태스크에 어떤 행위를 추가하려면 TaskAction 어노테이션을 지정한 메소드를 추가하면 된다. 태스크가 실행 될 때 해당 메소드가 호출된다. 하지만 꼭 메소드를 정의할 필요는 없다. 태스크 클래스 생성자에서 doFirst() 혹은 doLast()를 행위를 지정한 클로저를 인자로 줘서 호출해도 된다.

  • build.gradle
    task hello(type: GreetingTask)
     
    class GreetingTask extends DefaultTask {
        @TaskAction
        def greet() {
            println 'hello from GreetingTask'
        }
    }
  • 실행하면
    > gradle -q hello
    hello from GreetingTask
gradle/customtask.1349512170.txt.gz · 마지막으로 수정됨: 2012/10/06 17:29 저자 kwon37xi