retrolambdaの導入でgradle-retrolambdaを使った時に、以下のエラーが出た時の対処法です。
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> When running gradle with java 5, 6 or 7, you must set the path to jdk8, either with property retrolambda.jdk or environment variable JAVA8_HOME
※ コマンドはMacの場合だけしか書いてません。すみません。。。
1. java8がインストールされているか
Macの場合、 /usr/libexec/java_home -V
で確認できるはずです。
Java8がなかったらOracleのページからインストールしましょう。
% /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
1.7.0_71, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
2. JAVA8_HOMEが設定されているか
echo $JAVA8_HOME
で確認しましょう。
% echo $JAVA8_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/
もしセットされていなければセットしましょう。
export JAVA8_HOME=`/usr/libexec/java_home -v 1.8`
3. gradleで JAVA8_HOME
が読み取れているか
println
で、 System.getenv("JAVA8_HOME")
の値がちゃんと読めているか確認します。
build.gradle
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
...
}
retrolambda {
println("***************** ---------- *******************")
println("JAVA8_HOME: " + System.getenv("JAVA8_HOME"))
println("***************** ---------- *******************")
jdk System.getenv("JAVA8_HOME")
defaultMethods true
}
dependencies {
...
}
もしnullだとしたら、AndroidStudioに環境変数を渡せていないです。
***************** ---------- *******************
JAVA8_HOME: null
***************** ---------- *******************
launchctl
で、環境変数を渡してやります。AndroidStudioに環境変数を渡す を参考に。
launchctl setenv JAVA8_HOME $JAVA8_HOME