Gradle | DefaultTask 클래스 사용 | JavaExec 클래스 이용


DefaultTask 상속 클래스를 사용한 테스크 작성의 기본이 알았으니, Gradle에 제공되는 주요 DefaultTask 상속 클래스에 대한 사용법을 살펴보기로 한다.

JavaExec 클래스

JavaExec는 Java 프로그램의 실행을 위한 테스크를 구현하는 클래스이다. 이 클래스에는 실행에 필요한 각종 메소드가 준비되어 있다. 중요한 것을 아래 정리해 두었다.

main "클래스"

실행하는 클래스를 지정하는 메소드이다. 클래스명을 텍스트로 인수로 지정하여 호출한다.

classpath "텍스트"

여기에서는 실행 시에 classpath로 지정하는 텍스트를 설정한다. 디폴트 classpath 로 좋다면, sourceSets.main.runtimeClasspath라는 값을 지정해 둔다.

args "Iterator"
args "값1, 값2, ..."

인수로 전달할 정보를 지정하는 것이다. 이것은 Iterator로 정리하여 준비할 수 있으며, 부정 인수로 필요한 값을 개별적으로 인수에 지정할 수도 있다.

jvmArgs "Iterator"
jvmArgs "값1, 값2, ..."

여기에서는 Java 가상 머신에 전달되는 인수를 지정한다. 이것도 역시 Iterator와 같은 이상한 인수가 준비되어 있다.

workingDir "텍스트"

작업 디렉토리를 지정하는 것이다. 인수에는 설정하고자 하는 디렉토리의 경로를 지정한다. 이것은 프로젝트 폴더에서의 상대 경로로 지정한다.

그럼, 이 JavaExec을 이용한 테스크의 예를 들어 둔다.

task appRun(type: JavaExec) {
    group 'devkuma'
    description 'exec App class.'
    main 'App'
    classpath sourceSets.main.runtimeClasspath
     
    doFirst {
        println()
        println('---------- Start ----------')
        println()
    }
    doLast {
        println()
        println('----------- end -----------')
        println()
    }
}

여기에서는 App 클래스를 실행하는 appRun 작업을 만들었다. gradle appRun라고 실행하면 콘솔에 다음과 같이 출력된다.

$ gradle appRun

> Task :appRun

---------- Start ----------

Hello world.

----------- end -----------

Gradle에서의 실행은 다양한 출력이 있어 실행 결과를 알아보기 어렵기에, doFirst과 doLast으로 텍스트를 출력해서 한눈에 “이것이 실행 내용"이라고 알 수 있도록 해본다. 여기에서는 다음과 같이 ExecJava 설정을 하고 있다.

main 'App'
classpath sourceSets.main.runtimeClasspath

일단 main과 classpath 만 준비한다. 이 2개는 디폴트로 값이 설정되어 있지 않아서 생략할 수도 없다. 그 외의 것은 디폴트인 상태로도 문제가 없을 것이다.