Gradle:Could not target platform: ‘Java SE 12’ using tool chain: ‘JDK 8 (1.8)’.

2019年7月7日

問題

Gradleの実行で

Could not target platform: 'Java SE 12' using tool chain: 'JDK 8 (1.8)'.

というエラーが発生した。もちろん、build.gradleにおいて、

sourceCompatibility = 12
targetCompatibility = 12

としているからなのだが、なぜJava8が実行されているのかわからない。

Eclipse上のEGradleを使用しても、コマンドプロンプトで生のgradle.batを呼び出しても同じエラーになる。

–infoをつけて実行してみると、

C:\devel\workspace\Module>gradle --info compileJava
gradle --info compileJava
Initialized native services in: C:\Users\Owner\.gradle\native
Starting process 'command 'C:\Program Files\AdoptOpenJDK\jdk-8.0.212.04-hotspot\bin\java.exe''. Working directory: C:\devel\workspace\Module Command: C:\Program Files\AdoptOpenJDK\jdk-8.0.212.04-hotspot\bin\java.exe -version

(略)

* What went wrong:
Execution failed for task ':compileJava'.
> Could not target platform: 'Java SE 12' using tool chain: 'JDK 8 (1.8)'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 3s
1 actionable task: 1 executed

たしかにjava8でコンパイルしようとしている。

解決

c:\user\ユーザ名.gradle\gradle.propertiesの定義のせいであった。ここがJava8になっていたのだが、

org.gradle.java.home=C:/Program Files/AdoptOpenJDK/jdk-12.0.1.12-hotspot

などとして、Java12を指定しなければならなかった。

Gradleはどこのjavaを使うのか?

正式な文書が見つからないのだが、調査してみたところでは以下らしい。

  • JAVA_HOMEが設定されていれば、そのJDKを使う。
  • gradle.propertiesにorg.gradle.java.homeが設定されていればそちらを優先する。
  • 両方とも設定されていなければ、現在パスの通っているjavaコマンドを使う。