Gradle | DefaultTask 클래스 사용 | 커멘드를 실행하는 Exec 이용


프로젝트에서 작성하고 있는 Java 프로그램이 아닌, 다른 프로그램을 실행하려는 경우도 있다. 이러한 경우에 사용되는 것이 Exec 클래스이다.

Exec 클래스는 커멘드 라인에서 명령을 실행하는 기능을 한다. 이에 몇 가지 메소드가 준비되어 있으며, 명령 실행에 관한 설정을 할 수 있게 되어 있다.

commandLine "실행 명령", "인수"...

실행할 명령의 내용을 지정한다. 첫번째 인수에 커멘드를 작성하고, 그 이후에 옵션 등을 인수로 지정한다.

workingDir "텍스트"

이것은 앞에서 이미 설명 했었다. 작업 디렉토리를 지정하는 것이다.

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

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

Windows에서 실행

일단 이것만 알고 있으면 명령의 실행은 충분히 있을 것이다. 그러면 실제로 간단한 예를 들어 보겠다.

task javaVer(type:Exec) {
    group 'devkuma'
    description 'print java version.'
    workingDir '.'
    commandLine 'cmd'
    args '/c', 'java.bat'
    doFirst {
        println()
        println('***** Java Version *****')
    }
}

먼저 실행하는 명령으로 간단한 배치 파일을 만들어 둔다. 여기에서는 Windows에서 실행하기 위한 전제로 설명을 한다. 프로젝트 폴더에 “java.bat"라는 이름으로 파일을 준비한다. 그리고 다음과 같이 작성해 둔다.

java.exe -version

보면 알 수 있듯이 Java 버전을 출력하는 명령을 실행하고 있다. 이 배치 파일을 실행하는 작업을 만들 수 있다.

아래에 샘플을 올려 두었다.

> Task :javaVer

***** Java Version *****

C:\dev\GradleApp>java.exe -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

작성한 후에 gradle javaVer라고 실행해 본다. 다음과 같이 버전이 출력된다.

설치된 JDK를 사용하여 표시는 달라질 것이지만, 대체로 이런 출력이 된다. 여기에서는 다음과 같이 실행 명령 설정을 한다.

workingDir '.'
commandLine 'cmd'
args '/c', 'javaver.bat'

이것으로 cmd /c java.bat라는 명령이 실행된다. 그러면 java.bat에 작성된 java.exe -version가 실행되어 Java 버전 정보가 출력된다.

Mac 및 리눅스 계열에서 실행

Window가 아닌 Mac 및 리눅스 계열에서 실행되는 예제는 아래와 같다.

task javaVer(type:Exec) {
    group 'devkuma'
    description 'print java version.'
    workingDir '.'
    commandLine './javaver'
    doFirst {
        println()
        println('***** Java Version *****')
    }
}

javaver 파일을 생성하여 아래와 같이 파일을 저장하고, chmod로 실행 권한을 부여한다.

java -version

출력은 Window와 동일하다.