Gradleで外部コマンドを実行する(Checkstyleを実行する)

Gradleでは、タスクの中で外部コマンドを実行することができる。
Gradle CheckStyle Pluginは、JavaコードだけしかCheckしないため、他のファイルに対してチェックを行うために、外部コマンドでチェックを実行する時の実装を紹介する。

以下のコードでは、ソースのコンパイル完了後にsrc/main/resources配下のファイルのCheckstyleのチェックを実行するようにしている。

プロジェクトのディレクトリ構成は以下の通り。

プロジェクトルート
 |
 |ーーconfig
 |   |ーーcheckstyle
 |       |ーー checkstyle.xml(Checkstyleの設定ファイル)
 |       |ーー checkstyle-10.3.1-all.jar(外部コマンドで実行したいJarファイル)
 |ーーsrc
 |  |ーmain
 |ーーbuild.gradle

build.gradle

tasks.withType(JavaCompile) {
    // Gradle Checkstyle Pluginは、JavaコードだけしかCheckしないため、自力でコマンド実行
    doLast{
       def stdout = new ByteArrayOutputStream();

       exec {
           workingDir = rootDir
           // 実行したいコマンドをここに書く
           commandLine 'java', '-Dconfig_loc=./config/checkstyle', '-jar', './config/checkstyle/checkstyle-10.3.1-all.jar', '-c', './config/checkstyle/checkstyle.xml', "${projectDir}/src/main/resources"
           standardOutput = stdout;
       }

       // 標準出力に'[WARN]'が存在する場合、CheckStyleで警告が存在するため、ビルド失敗とする
       if (stdout.toString().contains('[WARN]')) {
           println "Output:\\n$stdout";
           throw new RuntimeException('Build failed. CheckStyle');
       }
    }
}