|
@@ -12,6 +12,7 @@ import org.elasticsearch.gradle.internal.BwcVersions;
|
|
|
import org.elasticsearch.gradle.internal.conventions.info.GitInfo;
|
|
|
import org.elasticsearch.gradle.internal.conventions.info.ParallelDetector;
|
|
|
import org.elasticsearch.gradle.internal.conventions.util.Util;
|
|
|
+import org.gradle.api.Action;
|
|
|
import org.gradle.api.GradleException;
|
|
|
import org.gradle.api.JavaVersion;
|
|
|
import org.gradle.api.Plugin;
|
|
@@ -24,6 +25,9 @@ import org.gradle.internal.jvm.Jvm;
|
|
|
import org.gradle.internal.jvm.inspection.JvmInstallationMetadata;
|
|
|
import org.gradle.internal.jvm.inspection.JvmMetadataDetector;
|
|
|
import org.gradle.internal.jvm.inspection.JvmVendor;
|
|
|
+import org.gradle.jvm.toolchain.JavaLanguageVersion;
|
|
|
+import org.gradle.jvm.toolchain.JavaToolchainSpec;
|
|
|
+import org.gradle.jvm.toolchain.JvmVendorSpec;
|
|
|
import org.gradle.jvm.toolchain.internal.InstallationLocation;
|
|
|
import org.gradle.jvm.toolchain.internal.JavaInstallationRegistry;
|
|
|
import org.gradle.util.GradleVersion;
|
|
@@ -88,12 +92,12 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
|
|
|
BuildParams.init(params -> {
|
|
|
params.reset();
|
|
|
params.setRuntimeJavaHome(runtimeJavaHome);
|
|
|
- // TODO: Temporarily hard-code this to 17 until we upgrade to Gradle 7.3 and bump minimumRuntimeVersion
|
|
|
+ params.setJavaToolChainSpec(resolveToolchainSpecFromEnv());
|
|
|
params.setRuntimeJavaVersion(
|
|
|
determineJavaVersion(
|
|
|
"runtime java.home",
|
|
|
runtimeJavaHome,
|
|
|
- isRuntimeJavaHomeSet ? JavaVersion.VERSION_17 : Jvm.current().getJavaVersion()
|
|
|
+ isRuntimeJavaHomeSet ? minimumRuntimeVersion : Jvm.current().getJavaVersion()
|
|
|
)
|
|
|
);
|
|
|
params.setIsRuntimeJavaHomeSet(isRuntimeJavaHomeSet);
|
|
@@ -122,6 +126,19 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
|
|
|
project.getGradle().getTaskGraph().whenReady(graph -> logGlobalBuildInfo());
|
|
|
}
|
|
|
|
|
|
+ private Provider<MetadataBasedToolChainMatcher> resolveToolchainSpecFromEnv() {
|
|
|
+ return providers.environmentVariable("JAVA_TOOLCHAIN_HOME").map(toolChainEnvVariable -> {
|
|
|
+ File toolChainDir = new File(toolChainEnvVariable);
|
|
|
+ JvmInstallationMetadata metadata = metadataDetector.getMetadata(toolChainDir);
|
|
|
+ if (metadata.isValidInstallation() == false) {
|
|
|
+ throw new GradleException(
|
|
|
+ "Configured JAVA_TOOLCHAIN_HOME " + toolChainEnvVariable + " does not point to a valid jdk installation."
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return new MetadataBasedToolChainMatcher(metadata);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private String formatJavaVendorDetails(JvmInstallationMetadata runtimeJdkMetaData) {
|
|
|
JvmVendor vendor = runtimeJdkMetaData.getVendor();
|
|
|
return runtimeJdkMetaData.getVendor().getKnownVendor().name() + "/" + vendor.getRawVendor();
|
|
@@ -166,6 +183,10 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
|
|
|
LOGGER.quiet(" JDK Version : " + gradleJvmImplementationVersion + " (" + gradleJvmVendorDetails + ")");
|
|
|
LOGGER.quiet(" JAVA_HOME : " + gradleJvm.getJavaHome());
|
|
|
}
|
|
|
+ String javaToolchainHome = System.getenv("JAVA_TOOLCHAIN_HOME");
|
|
|
+ if (javaToolchainHome != null) {
|
|
|
+ LOGGER.quiet(" JAVA_TOOLCHAIN_HOME : " + javaToolchainHome);
|
|
|
+ }
|
|
|
LOGGER.quiet(" Random Testing Seed : " + BuildParams.getTestSeed());
|
|
|
LOGGER.quiet(" In FIPS 140 mode : " + BuildParams.isInFipsJvm());
|
|
|
LOGGER.quiet("=======================================");
|
|
@@ -260,8 +281,13 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
|
|
|
if (runtimeJavaProperty != null) {
|
|
|
return new File(findJavaHome(runtimeJavaProperty));
|
|
|
}
|
|
|
-
|
|
|
- return System.getenv("RUNTIME_JAVA_HOME") == null ? Jvm.current().getJavaHome() : new File(System.getenv("RUNTIME_JAVA_HOME"));
|
|
|
+ String env = System.getenv("RUNTIME_JAVA_HOME");
|
|
|
+ if (env != null) {
|
|
|
+ return new File(env);
|
|
|
+ }
|
|
|
+ // fall back to tool chain if set.
|
|
|
+ env = System.getenv("JAVA_TOOLCHAIN_HOME");
|
|
|
+ return env == null ? Jvm.current().getJavaHome() : new File(env);
|
|
|
}
|
|
|
|
|
|
private String findJavaHome(String version) {
|
|
@@ -336,4 +362,19 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static class MetadataBasedToolChainMatcher implements Action<JavaToolchainSpec> {
|
|
|
+ private final JvmVendorSpec expectedVendorSpec;
|
|
|
+ private final JavaLanguageVersion expectedJavaLanguageVersion;
|
|
|
+
|
|
|
+ public MetadataBasedToolChainMatcher(JvmInstallationMetadata metadata) {
|
|
|
+ expectedVendorSpec = JvmVendorSpec.matching(metadata.getVendor().getRawVendor());
|
|
|
+ expectedJavaLanguageVersion = JavaLanguageVersion.of(metadata.getLanguageVersion().getMajorVersion());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void execute(JavaToolchainSpec spec) {
|
|
|
+ spec.getVendor().set(expectedVendorSpec);
|
|
|
+ spec.getLanguageVersion().set(expectedJavaLanguageVersion);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|