Gradle のビルドで使用するJavaバージョンを指定するには

blog1.mammb.com

Gradle 6.7 以降で Java ツールチェーンを利用できるようになりました。Java ツールチェーンを使うことで、要件に合う JRE/JDK を自動検出し、見つからない場合には自動的にダウンロードしてビルドすることができます。

build.gradle.kts(build.gradle) に以下のように指定します。

Kotlin DSL
java {
  toolchain {
    languageVersion.set(JavaLanguageVersion.of(17))
  }
}
Groovy DSL
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

buildSrc/src/main/kotlin/myproject.java-conventions.gradle.kts などに指定することで、プロジェクト全体に設定することもできます。

Gradle が検出したツールチェーンのリストは以下のように表示することができます

$ ./gradlew -q javaToolchains


ベンダの指定

ベンダを指定する場合は以下のようにします。

Kotlin DSL
java {
  toolchain {
    languageVersion.set(JavaLanguageVersion.of(11))
    vendor.set(JvmVendorSpec.ADOPTIUM)
  }
}
Groovy DSL
java {
  toolchain {
    languageVersion = JavaLanguageVersion.of(11)
    vendor = JvmVendorSpec.ADOPTIUM
  }
}


特定タスクのJavaバージョン指定

Kotlin DSL
tasks.register<JavaExec>("runOn14") {
    javaLauncher.set(javaToolchains.launcherFor {
        languageVersion.set(JavaLanguageVersion.of(14))
    })

    classpath = sourceSets["main"].runtimeClasspath
    mainClass.set(application.mainClass)
}
Groovy DSL
task('runOn14', type: JavaExec) {
    javaLauncher = javaToolchains.launcherFor {
        languageVersion = JavaLanguageVersion.of(14)
    }

    classpath = sourceSets.main.runtimeClasspath
    mainClass = application.mainClass
}