elastic/elasticsearch · error · GradleException
Project requires Java version of {} or newer but Gradle JAVA
Error message
Project requires Java version of {} or newer but Gradle JAVA_HOME is {} What it means
Thrown by GlobalBuildInfoPlugin.assertMinimumCompilerVersion() when the Gradle daemon's own JAVA_HOME (Jvm.current()) has a Java version older than minimumCompilerVersion (from version.properties). This check is skipped when system property idea.active=true (IntelliJ integration). The comparison uses JavaVersion.compareTo.
Source
Thrown at build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java:375
}
private static void throwInvalidJavaHomeException(String description, File javaHome, int expectedVersion, int actualVersion) {
String message = String.format(
Locale.ROOT,
"The %s must be set to a JDK installation directory for Java %d but is [%s] corresponding to [%s]",
description,
expectedVersion,
javaHome,
actualVersion
);
throw new GradleException(message);
}
private static void assertMinimumCompilerVersion(JavaVersion minimumCompilerVersion) {
JavaVersion currentVersion = Jvm.current().getJavaVersion();
if (System.getProperty("idea.active", "false").equals("true") == false && minimumCompilerVersion.compareTo(currentVersion) > 0) {
throw new GradleException(
"Project requires Java version of " + minimumCompilerVersion + " or newer but Gradle JAVA_HOME is " + currentVersion
);
}
}
private RuntimeJava findRuntimeJavaHome() {
Properties versionProperties = (Properties) project.getExtensions().getByName(VERSIONS_EXT);
String bundledJdkVersion = versionProperties.getProperty("bundled_jdk");
String bundledJdkMajorVersion = bundledJdkVersion.split("[.+]")[0];
String runtimeJavaProperty = System.getProperty("runtime.java");
if (runtimeJavaProperty != null) {
if (runtimeJavaProperty.toLowerCase().endsWith("-pre")) {
// handle pre-release builds differently due to lack of support in Gradle toolchain service
// we resolve them using JdkDownloadPlugin for now.
return resolvePreReleaseRuntimeJavaHome(runtimeJavaProperty, bundledJdkMajorVersion);
} else {
return runtimeJavaHome(resolveJavaHomeFromToolChainService(runtimeJavaProperty), true, bundledJdkMajorVersion);View on GitHub (pinned to db6a809a66)
Solutions
- Set JAVA_HOME to a JDK >= minimumCompilerJava: export JAVA_HOME=/path/to/jdk-21.
- Stop and restart the Gradle daemon so it picks up the new JAVA_HOME: ./gradlew --stop && ./gradlew build.
- Check the required version in version.properties (minimumCompilerJava).
- If running in IntelliJ, the check is bypassed (idea.active=true), but command-line builds still require the correct JAVA_HOME.
Example fix
# before export JAVA_HOME=/opt/jdk-17 # Gradle runs on 17, project requires 21 ./gradlew build # after export JAVA_HOME=/opt/jdk-21 ./gradlew --stop # kill old daemon ./gradlew build
Defensive patterns
Strategy: validation
Validate before calling
// Validate Gradle JDK version before build
Properties vp = (Properties) project.getExtensions().getByName(VERSIONS_EXT);
JavaVersion minimum = JavaVersion.toVersion(vp.get("minimumCompilerJava"));
if (Jvm.current().getJavaVersion().compareTo(minimum) < 0) {
throw new GradleException("Gradle JAVA_HOME must be Java " + minimum + "+");
} Prevention
- Set JAVA_HOME to a JDK >= minimumCompilerJava before launching Gradle.
- Restart the Gradle daemon after changing JAVA_HOME: ./gradlew --stop.
- Verify java -version matches expectations before building.
When it happens
Trigger: Gradle is launched with a JAVA_HOME that points to a JDK older than minimumCompilerJava from version.properties. The check runs during apply() unless idea.active is 'true'. For example, minimumCompilerJava is 21 but Gradle runs on Java 17.
Common situations: JAVA_HOME env var points to an old JDK used by other projects. The Gradle daemon was started with an old JDK and is being reused. A CI agent has a default JAVA_HOME that is outdated. IntelliJ is configured correctly (idea.active=true bypasses this) but command-line builds fail.
Related errors
- The %s must be set to a JDK installation directory for Java
- Gradle {minimumGradleVersion}+ is required
- Configured JAVA_TOOLCHAIN_HOME {toolChainEnvVariable} does n
- Cannot resolve minimum compiler version via VersionPropertie
- Can't determine OS from: ${os}
AI-assisted analysis of elastic/elasticsearch@db6a809a66 (2026-08-12).
Data as JSON: /api/errors/1d36cceab5ab0f8c.
Report an issue: GitHub.