TL;DR
Gradle 8.0 で以下のようなワーニングや
$ ./gradlew build --warning-mode all Using a toolchain installed via auto-provisioning, but having no toolchain repositories configured. This behavior is deprecated. Consider defining toolchain download repositories, otherwise the build might fail in clean environments; see https://docs.gradle.org/8.0/userguide/toolchains.html#sub:download_repositories
以下のようなエラーが出た場合、
$ ./gradlew build FAILURE: Build failed with an exception. * What went wrong: Could not determine the dependencies of task ':app:distTar'. > Could not resolve all dependencies for configuration ':app:runtimeClasspath'. > Failed to calculate the value of task ':app:compileJava' property 'javaCompiler'. > No matching toolchains found for requested specification: {languageVersion=19, vendor=any, implementation=vendor-specific}. > No locally installed toolchains match (see https://docs.gradle.org/8.0/userguide/toolchains.html#sec:auto_detection) and toolchain download repositories have not been configured (see https://docs.gradle.org/8.0/userguide/toolchains.html#sub:download_repositories).
settings.gradle.kts
に 以下を定義しましょう。
plugins { id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0") }
ツールチェーン と ツールチェーンリポジトリ
Gradle 6.7 で導入された toolchain
を指定することで、コンパイル、テスト、javadoc タスク などに利用するツールチェーンを構成できるようになりました。
java { toolchain { languageVersion.set(JavaLanguageVersion.of(19)) } }
対象のツールチェーンがローカルに見つからない場合は自動的にダウンロードして利用可能になります。
Gradle 7.6 ではツールチェーンリポジトリが導入され、ダウンロードするツールチェーンのベンダなどを柔軟に定義できるようになりました。
例えば以下のようにして JVM ベンダを指定することができます。
java { toolchain { languageVersion.set(JavaLanguageVersion.of(11)) vendor.set(JvmVendorSpec.ADOPTIUM) } }
ローカルで利用可能なツールチェーンが見つからない場合、Gradle はツールチェーンリポジトリの構成に従い自動的にJDKをダウンロードし、Gradle ユーザー ホーム ディレクトリにインストールします。
Gradle 8.0 からのツールチェーンリポジトリ
Gradle 8.0 からは、 デフォルトのツールチェーンプロビジョナーが提供されなくなり、ツールチェーン リポジトリを明示的に宣言する必要があります。
通常は settings.gradle.kts
に Foojay Toolchains Plugin を定義しておくことで事足ります。
plugins { id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0") }
このプラグインは foojay Disco APIに基づくツールのダウンロードリポジトリ構成を提供します。
多くのツールベンダが様々なバージョンのJDKを提供するようになったため、プラグインとして外だし管理されるようになりました。という訳です。
なお、ローカルに存在する Gradle が検出したツールチェーンのリストは以下で確認できます。
$ ./gradlew -q javaToolchains + Options | Auto-detection: Enabled | Auto-download: Enabled + Eclipse Temurin JDK 18.0.2+9 | Location: ...\jdk-18.0.2+9 | Language Version: 18 | Vendor: Eclipse Temurin | Architecture: amd64 | Is JDK: true | Detected by: Auto-provisioned by Gradle + Eclipse Temurin JDK 19.0.2+7 | Location: ...\jdk-19.0.2+7 | Language Version: 19 | Vendor: Eclipse Temurin | Architecture: amd64 | Is JDK: true | Detected by: Auto-provisioned by Gradle