Browse Source

Use toolchain in favor of custom jdk plugin for runtime jdk setup (#99922)

* Use toolchain in favor of custom jdk plugin for runtime jdk setup
* Remove logic for Passing runtime java version via JAVAX_HOME
* Cleanup runtime provisioning gradle script
Rene Groeschke 2 years ago
parent
commit
1fa816ee8c

+ 11 - 16
build-tools-internal/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle

@@ -18,19 +18,15 @@ import org.elasticsearch.gradle.testclusters.StandaloneRestIntegTestTask
 // gradle has an open issue of failing applying plugins in
 // precompiled script plugins (see https://github.com/gradle/gradle/issues/17004)
 
-
 configure(allprojects) {
-    apply plugin: 'elasticsearch.jdk-download'
-
-    jdks {
-        provisioned_runtime {
-            vendor = VersionProperties.bundledJdkVendor
-            version = VersionProperties.bundledJdkVersion
-            platform = OS.current().name().toLowerCase()
-            architecture = Architecture.current().name().toLowerCase()
-        }
+    def launcher = javaToolchains.launcherFor {
+      languageVersion = JavaLanguageVersion.of(VersionProperties.bundledJdkMajorVersion)
+      vendor = VersionProperties.bundledJdkVendor == "openjdk" ?
+        JvmVendorSpec.ORACLE :
+        JvmVendorSpec.matching(VersionProperties.bundledJdkVendor)
     }
-    project.tasks.withType(Test).configureEach { Test test ->
+
+  project.tasks.withType(Test).configureEach { Test test ->
         if (BuildParams.getIsRuntimeJavaHomeSet()) {
             test.executable = "${BuildParams.runtimeJavaHome}/bin/java" +
                     (OS.current() == OS.WINDOWS ? '.exe' : '')
@@ -47,7 +43,7 @@ configure(allprojects) {
         project.plugins.withId("elasticsearch.internal-testclusters") { internalPlugin ->
             if (BuildParams.getIsRuntimeJavaHomeSet() == false) {
                 // If no runtime java home is set, use the bundled JDK for test clusters
-                testClustersPlugin.setRuntimeJava(providers.provider(() -> file("${project.jdks.provisioned_runtime.javaHomePath}")))
+                testClustersPlugin.setRuntimeJava(launcher.map { it.metadata.installationPath.asFile })
             }
         }
     }
@@ -55,8 +51,7 @@ configure(allprojects) {
     project.plugins.withType(RestTestBasePlugin) {
       tasks.withType(StandaloneRestIntegTestTask).configureEach {
         if (BuildParams.getIsRuntimeJavaHomeSet() == false) {
-          dependsOn(project.jdks.provisioned_runtime)
-          nonInputProperties.systemProperty("tests.runtime.java", "${-> project.jdks.provisioned_runtime.javaHomePath}")
+          nonInputProperties.systemProperty("tests.runtime.java", "${-> launcher.map { it.metadata.installationPath.asFile.path }.get()}")
         }
       }
     }
@@ -64,8 +59,8 @@ configure(allprojects) {
     project.plugins.withType(ThirdPartyAuditPrecommitPlugin) {
       project.getTasks().withType(ThirdPartyAuditTask.class).configureEach {
         if (BuildParams.getIsRuntimeJavaHomeSet() == false) {
-          javaHome.set(providers.provider(() -> "${project.jdks.provisioned_runtime.javaHomePath}"))
-          targetCompatibility.set(providers.provider(() -> JavaVersion.toVersion(project.jdks.provisioned_runtime.major)))
+          javaHome.set(launcher.map { it.metadata.installationPath.asFile.path })
+          targetCompatibility.set(providers.provider(() -> JavaVersion.toVersion(launcher.map { it.metadata.javaRuntimeVersion }.get())))
         }
       }
     }

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

@@ -300,7 +300,7 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
         String runtimeJavaProperty = System.getProperty("runtime.java");
 
         if (runtimeJavaProperty != null) {
-            return new File(findJavaHome(runtimeJavaProperty));
+            return resolveJavaHomeFromToolChainService(runtimeJavaProperty);
         }
         String env = System.getenv("RUNTIME_JAVA_HOME");
         if (env != null) {
@@ -311,12 +311,6 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
         return env == null ? Jvm.current().getJavaHome() : new File(env);
     }
 
-    private String findJavaHome(String version) {
-        String javaHomeEnvVar = getJavaHomeEnvVarName(version);
-        String env = System.getenv(javaHomeEnvVar);
-        return env != null ? resolveJavaHomeFromEnvVariable(javaHomeEnvVar) : resolveJavaHomeFromToolChainService(version);
-    }
-
     @NotNull
     private String resolveJavaHomeFromEnvVariable(String javaHomeEnvVar) {
         Provider<String> javaHomeNames = providers.gradleProperty("org.gradle.java.installations.fromEnv");
@@ -348,17 +342,13 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
     }
 
     @NotNull
-    private String resolveJavaHomeFromToolChainService(String version) {
+    private File resolveJavaHomeFromToolChainService(String version) {
         Property<JavaLanguageVersion> value = objectFactory.property(JavaLanguageVersion.class).value(JavaLanguageVersion.of(version));
-        Provider<JavaLauncher> javaLauncherProvider = toolChainService.launcherFor(
-            javaToolchainSpec -> javaToolchainSpec.getLanguageVersion().value(value)
-        );
-
-        try {
-            return javaLauncherProvider.get().getMetadata().getInstallationPath().getAsFile().getCanonicalPath();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
+        Provider<JavaLauncher> javaLauncherProvider = toolChainService.launcherFor(javaToolchainSpec -> {
+            javaToolchainSpec.getLanguageVersion().value(value);
+            javaToolchainSpec.getVendor().set(JvmVendorSpec.ORACLE);
+        });
+        return javaLauncherProvider.get().getMetadata().getInstallationPath().getAsFile();
     }
 
     private static String getJavaHomeEnvVarName(String version) {

+ 2 - 2
build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/toolchain/ArchivedOracleJdkToolchainResolver.java

@@ -25,7 +25,7 @@ import java.util.Optional;
 
 public abstract class ArchivedOracleJdkToolchainResolver extends AbstractCustomJavaToolchainResolver {
 
-    private static final Map<Integer, String> ARCHIVED_BASE_VERSIONS = Maps.of(19, "19.0.2", 18, "18.0.2.1", 17, "17.0.7");
+    private static final Map<Integer, String> ARCHIVED_BASE_VERSIONS = Maps.of(20, "20.0.2", 19, "19.0.2", 18, "18.0.2.1", 17, "17.0.7");
 
     @Override
     public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
@@ -54,6 +54,7 @@ public abstract class ArchivedOracleJdkToolchainResolver extends AbstractCustomJ
                     + arch
                     + "_bin."
                     + extension
+
             )
         );
     }
@@ -78,5 +79,4 @@ public abstract class ArchivedOracleJdkToolchainResolver extends AbstractCustomJ
         OperatingSystem operatingSystem = buildPlatform.getOperatingSystem();
         return Architecture.AARCH64 != architecture || OperatingSystem.WINDOWS != operatingSystem;
     }
-
 }

+ 6 - 0
build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/toolchain/ArchivedOracleJdkToolchainResolverSpec.groovy

@@ -23,6 +23,12 @@ class ArchivedOracleJdkToolchainResolverSpec extends AbstractToolchainResolverSp
     @Override
     def supportedRequests() {
         return [
+                [20, ORACLE, MAC_OS, X86_64, "https://download.oracle.com/java/20/archive/jdk-20.0.2_macos-x64_bin.tar.gz"],
+                [20, ORACLE, MAC_OS, AARCH64, "https://download.oracle.com/java/20/archive/jdk-20.0.2_macos-aarch64_bin.tar.gz"],
+                [20, ORACLE, LINUX, X86_64, "https://download.oracle.com/java/20/archive/jdk-20.0.2_linux-x64_bin.tar.gz"],
+                [20, ORACLE, LINUX, AARCH64, "https://download.oracle.com/java/20/archive/jdk-20.0.2_linux-aarch64_bin.tar.gz"],
+                [20, ORACLE, WINDOWS, X86_64, "https://download.oracle.com/java/20/archive/jdk-20.0.2_windows-x64_bin.zip"],
+
                 [19, ORACLE, MAC_OS, X86_64, "https://download.oracle.com/java/19/archive/jdk-19.0.2_macos-x64_bin.tar.gz"],
                 [19, ORACLE, MAC_OS, AARCH64, "https://download.oracle.com/java/19/archive/jdk-19.0.2_macos-aarch64_bin.tar.gz"],
                 [19, ORACLE, LINUX, X86_64, "https://download.oracle.com/java/19/archive/jdk-19.0.2_linux-x64_bin.tar.gz"],

+ 0 - 1
gradle.properties

@@ -12,7 +12,6 @@ systemProp.jdk.tls.client.protocols=TLSv1.2
 
 # java homes resolved by environment variables
 org.gradle.java.installations.auto-detect=false
-org.gradle.java.installations.fromEnv=JAVA_TOOLCHAIN_HOME,JAVA_HOME,RUNTIME_JAVA_HOME,JAVA21_HOME,JAVA20_HOME,JAVA19_HOME,JAVA18_HOME,JAVA17_HOME,JAVA16_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME
 
 # log some dependency verification info to console
 org.gradle.dependency.verification.console=verbose