Skip to content

Commit 4780b1e

Browse files
mark-vieiraalbertzaharovits
authored andcommitted
Ensure correct runtime Java is used when it matches build Java (#110730)
Ensures that the value provided by the `runtime.java` system property, or `RUNTIME_JAVA_HOME` environment variable is respected, even when it is the same as the current `JAVA_HOME`. The previous logic had `isRuntimeJavaHomeSet` return `false` when the "requested" Java was the same as the current one. This isn't strictly correct, as the behavior when Java home is unset is to use the bundled JDK. The result was that passing `-Druntime.java=17` when the Gradle daemon was also using Java 17 was to execute tests with the bundled JDK, which could be something entirely different.
1 parent d8210a1 commit 4780b1e

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.util.Arrays;
5252
import java.util.List;
5353
import java.util.Locale;
54+
import java.util.Optional;
5455
import java.util.Random;
5556
import java.util.concurrent.atomic.AtomicReference;
5657
import java.util.stream.Collectors;
@@ -97,24 +98,25 @@ public void apply(Project project) {
9798
JavaVersion minimumCompilerVersion = JavaVersion.toVersion(getResourceContents("/minimumCompilerVersion"));
9899
JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion"));
99100

100-
File runtimeJavaHome = findRuntimeJavaHome();
101-
boolean isRuntimeJavaHomeSet = Jvm.current().getJavaHome().equals(runtimeJavaHome) == false;
101+
Optional<File> selectedRuntimeJavaHome = findRuntimeJavaHome();
102+
File actualRuntimeJavaHome = selectedRuntimeJavaHome.orElse(Jvm.current().getJavaHome());
103+
boolean isRuntimeJavaHomeSet = selectedRuntimeJavaHome.isPresent();
102104

103105
GitInfo gitInfo = GitInfo.gitInfo(project.getRootDir());
104106

105107
BuildParams.init(params -> {
106108
params.reset();
107-
params.setRuntimeJavaHome(runtimeJavaHome);
109+
params.setRuntimeJavaHome(actualRuntimeJavaHome);
108110
params.setJavaToolChainSpec(resolveToolchainSpecFromEnv());
109111
params.setRuntimeJavaVersion(
110112
determineJavaVersion(
111113
"runtime java.home",
112-
runtimeJavaHome,
114+
actualRuntimeJavaHome,
113115
isRuntimeJavaHomeSet ? minimumRuntimeVersion : Jvm.current().getJavaVersion()
114116
)
115117
);
116118
params.setIsRuntimeJavaHomeSet(isRuntimeJavaHomeSet);
117-
JvmInstallationMetadata runtimeJdkMetaData = metadataDetector.getMetadata(getJavaInstallation(runtimeJavaHome));
119+
JvmInstallationMetadata runtimeJdkMetaData = metadataDetector.getMetadata(getJavaInstallation(actualRuntimeJavaHome));
118120
params.setRuntimeJavaDetails(formatJavaVendorDetails(runtimeJdkMetaData));
119121
params.setJavaVersions(getAvailableJavaVersions());
120122
params.setMinimumCompilerVersion(minimumCompilerVersion);
@@ -298,19 +300,19 @@ private static void assertMinimumCompilerVersion(JavaVersion minimumCompilerVers
298300
}
299301
}
300302

301-
private File findRuntimeJavaHome() {
303+
private Optional<File> findRuntimeJavaHome() {
302304
String runtimeJavaProperty = System.getProperty("runtime.java");
303305

304306
if (runtimeJavaProperty != null) {
305-
return resolveJavaHomeFromToolChainService(runtimeJavaProperty);
307+
return Optional.of(resolveJavaHomeFromToolChainService(runtimeJavaProperty));
306308
}
307309
String env = System.getenv("RUNTIME_JAVA_HOME");
308310
if (env != null) {
309-
return new File(env);
311+
return Optional.of(new File(env));
310312
}
311313
// fall back to tool chain if set.
312314
env = System.getenv("JAVA_TOOLCHAIN_HOME");
313-
return env == null ? Jvm.current().getJavaHome() : new File(env);
315+
return env == null ? Optional.empty() : Optional.of(new File(env));
314316
}
315317

316318
@NotNull

0 commit comments

Comments
 (0)