質問『Gradle のビルドスクリプトで、処理環境が整ってないとかでタスク途中で中断するにはどうすればいいの?』
答え『例外投げろ』
例えば、実行環境は Java8 に移行済みなんだけれど、大人の事情の都合で Java7 環境向けのコードを出さないといけない場合に JDK7 のパスが設定されていない場合はエラーを吐いてビルドを止めたいってことがあるでしょう。
その場合は以下のようにすれば JDK7 のパスがわからない場合にはスクリプト途中で止めることができます。
// Java7 環境用にコンパイルしたいのよね allprojects { apply plugin: 'java' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' // 実行中の Java バージョンを確認して Java8 以降の場合はクロスバージョンコンパイルする if (JavaVersion.VERSION_1_7 < JavaVersion.current() ) { sourceCompatibility = 1.7 targetCompatibility = 1.7 if (System.env.JDK7_HOME) { // bootClasspath の設定をしないと実行時にNoSuchMethodErrorとかにぶつかってしまう [compileJava, compileTestJava]*.options*.bootClasspath = "$System.env.JDK7_HOME/jre/lib/rt.jar" } else { throw new GradleException('環境変数の JAVA_HOME か JDK7_HOME に JDK7 のパスを設定してね') } } }
あと、試していませんが実行中のタスクを抜けて次のタスクに移る場合(like break;)は StopActionException を投げればいいらしいです。
情報ソース
groovy - Recommended way to stop a build with Gradle - Stack Overflow
sourceCompatibility, targetCompatibility の設定だけだと痛い目に遭う。というのはこちらの通り、 Java8 でクラスライブラリの一部のシグニチャが変わったので、実行時にそれにぶつかると……という話。 ConcurrentHashMap#keySet とかまさにそれ。
Exception in thread "main" java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; · GitHub
Gradle 使ったクロスバージョンコンパイル用スクリプトは以下で公開されているものを参考にいたしました。
Java のバージョン間クロスコンパイル時の標準ライブラリについて (JDK 8 で Java 7 向けにコンパイルする場合など) - えっちなのはいけないと思います