Skip to content

Commit 005a949

Browse files
authored
[Gradle] Support runtime.java 24 and 25 (#119387) (#119399)
We add explicit support for running build with -Druntime.java=24 and -Druntime.java=24) By default it takes the build that was available at implementation time (b29 for 24 and b3 for 25) You can pass the build number also dynamically by running your build e.g. with ``` -Druntime.java=24 -Druntime.java.build=29 ``` which will resolve java ea24 build 29 fixes #118329 (cherry picked from commit f028340)
1 parent 4d17b21 commit 005a949

File tree

3 files changed

+104
-26
lines changed

3 files changed

+104
-26
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/toolchain/OracleOpenJdkToolchainResolver.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,16 @@ public String url(String os, String arch, String extension) {
5454
}
5555
}
5656

57-
record EarlyAccessJdkBuild(JavaLanguageVersion languageVersion, String version, String buildNumber) implements JdkBuild {
58-
57+
record EarlyAccessJdkBuild(JavaLanguageVersion languageVersion) implements JdkBuild {
5958
@Override
6059
public String url(String os, String arch, String extension) {
60+
String buildNumber = resolveBuildNumber(languageVersion.asInt());
6161
return "https://download.java.net/java/early_access/jdk"
62-
+ version
62+
+ languageVersion.asInt()
6363
+ "/"
64-
+ version
64+
+ buildNumber
6565
+ "/GPL/openjdk-"
66-
+ version
66+
+ languageVersion.asInt()
6767
+ "-ea+"
6868
+ buildNumber
6969
+ "_"
@@ -73,6 +73,29 @@ public String url(String os, String arch, String extension) {
7373
+ "_bin."
7474
+ extension;
7575
}
76+
77+
private static String resolveBuildNumber(int version) {
78+
String buildNumber = System.getProperty("runtime.java." + version + ".build");
79+
if (buildNumber != null) {
80+
System.out.println("buildNumber = " + buildNumber);
81+
return buildNumber;
82+
}
83+
buildNumber = System.getProperty("runtime.java.build");
84+
if (buildNumber != null) {
85+
System.out.println("buildNumber2 = " + buildNumber);
86+
return buildNumber;
87+
}
88+
89+
switch (version) {
90+
case 24:
91+
// latest explicitly found build number for 24
92+
return "29";
93+
case 25:
94+
return "3";
95+
default:
96+
throw new IllegalArgumentException("Unsupported version " + version);
97+
}
98+
}
7699
}
77100

78101
private static final Pattern VERSION_PATTERN = Pattern.compile(
@@ -88,8 +111,8 @@ public String url(String os, String arch, String extension) {
88111
// package private so it can be replaced by tests
89112
List<JdkBuild> builds = List.of(
90113
getBundledJdkBuild(),
91-
// 23 early access
92-
new EarlyAccessJdkBuild(JavaLanguageVersion.of(23), "23", "24")
114+
new EarlyAccessJdkBuild(JavaLanguageVersion.of(24)),
115+
new EarlyAccessJdkBuild(JavaLanguageVersion.of(25))
93116
);
94117

95118
private JdkBuild getBundledJdkBuild() {

build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/toolchain/AbstractToolchainResolverSpec.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
package org.elasticsearch.gradle.internal.toolchain
1111

12+
import spock.lang.Unroll
13+
1214
import org.gradle.api.provider.Property
1315
import org.gradle.jvm.toolchain.JavaLanguageVersion
1416
import org.gradle.jvm.toolchain.JavaToolchainDownload
@@ -26,6 +28,7 @@ import static org.gradle.platform.OperatingSystem.MAC_OS
2628

2729
abstract class AbstractToolchainResolverSpec extends Specification {
2830

31+
@Unroll
2932
def "resolves #os #arch #vendor jdk #langVersion"() {
3033
given:
3134
def resolver = resolverImplementation()

build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/toolchain/OracleOpenJdkToolchainResolverSpec.groovy

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,34 @@
99

1010
package org.elasticsearch.gradle.internal.toolchain
1111

12+
import spock.util.environment.RestoreSystemProperties
1213

1314
import org.gradle.api.services.BuildServiceParameters
1415
import org.gradle.jvm.toolchain.JavaLanguageVersion
16+
import org.gradle.jvm.toolchain.JavaToolchainDownload
17+
1518
import static org.gradle.jvm.toolchain.JvmVendorSpec.ORACLE
16-
import static org.gradle.platform.Architecture.*
19+
import static org.gradle.platform.Architecture.AARCH64
20+
import static org.gradle.platform.Architecture.X86_64
1721
import static org.gradle.platform.OperatingSystem.*
1822

1923
class OracleOpenJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
2024

25+
2126
OracleOpenJdkToolchainResolver resolverImplementation() {
2227
var toolChain = new OracleOpenJdkToolchainResolver() {
2328
@Override
2429
BuildServiceParameters.None getParameters() {
2530
return null
2631
}
2732
}
28-
toolChain.builds = [
29-
new OracleOpenJdkToolchainResolver.ReleasedJdkBuild(JavaLanguageVersion.of(20), "20", "36", "bdc68b4b9cbc4ebcb30745c85038d91d"),
30-
new OracleOpenJdkToolchainResolver.EarlyAccessJdkBuild(JavaLanguageVersion.of(21), "21", "6")
31-
]
33+
toolChain.builds = toolChain.builds.findAll { it instanceof OracleOpenJdkToolchainResolver.EarlyAccessJdkBuild } + [
34+
new OracleOpenJdkToolchainResolver.ReleasedJdkBuild(
35+
JavaLanguageVersion.of(20),
36+
"20",
37+
"36",
38+
"bdc68b4b9cbc4ebcb30745c85038d91d"
39+
)]
3240
toolChain
3341
}
3442

@@ -44,23 +52,67 @@ class OracleOpenJdkToolchainResolverSpec extends AbstractToolchainResolverSpec {
4452
[20, anyVendor(), LINUX, AARCH64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_linux-aarch64_bin.tar.gz"],
4553
[20, anyVendor(), WINDOWS, X86_64, "https://download.oracle.com/java/GA/jdk20/bdc68b4b9cbc4ebcb30745c85038d91d/36/GPL/openjdk-20_windows-x64_bin.zip"],
4654
// https://download.java.net/java/early_access/jdk23/23/GPL/openjdk-23-ea+23_macos-aarch64_bin.tar.gz
47-
[21, ORACLE, MAC_OS, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_macos-x64_bin.tar.gz"],
48-
[21, ORACLE, MAC_OS, AARCH64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_macos-aarch64_bin.tar.gz"],
49-
[21, ORACLE, LINUX, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_linux-x64_bin.tar.gz"],
50-
[21, ORACLE, LINUX, AARCH64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_linux-aarch64_bin.tar.gz"],
51-
[21, ORACLE, WINDOWS, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_windows-x64_bin.zip"],
52-
[21, anyVendor(), MAC_OS, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_macos-x64_bin.tar.gz"],
53-
[21, anyVendor(), MAC_OS, AARCH64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_macos-aarch64_bin.tar.gz"],
54-
[21, anyVendor(), LINUX, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_linux-x64_bin.tar.gz"],
55-
[21, anyVendor(), LINUX, AARCH64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_linux-aarch64_bin.tar.gz"],
56-
[21, anyVendor(), WINDOWS, X86_64, "https://download.java.net/java/early_access/jdk21/21/GPL/openjdk-21-ea+6_windows-x64_bin.zip"]
57-
]
55+
[24, ORACLE, MAC_OS, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_macos-x64_bin.tar.gz"],
56+
[24, ORACLE, MAC_OS, AARCH64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_macos-aarch64_bin.tar.gz"],
57+
[24, ORACLE, LINUX, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_linux-x64_bin.tar.gz"],
58+
[24, ORACLE, LINUX, AARCH64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_linux-aarch64_bin.tar.gz"],
59+
[24, ORACLE, WINDOWS, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_windows-x64_bin.zip"],
60+
[24, anyVendor(), MAC_OS, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_macos-x64_bin.tar.gz"],
61+
[24, anyVendor(), MAC_OS, AARCH64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_macos-aarch64_bin.tar.gz"],
62+
[24, anyVendor(), LINUX, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_linux-x64_bin.tar.gz"],
63+
[24, anyVendor(), LINUX, AARCH64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_linux-aarch64_bin.tar.gz"],
64+
[24, anyVendor(), WINDOWS, X86_64, "https://download.java.net/java/early_access/jdk24/29/GPL/openjdk-24-ea+29_windows-x64_bin.zip"]]
65+
}
66+
67+
@RestoreSystemProperties
68+
def "can provide build number for ea versions"() {
69+
given:
70+
System.setProperty('runtime.java.build', "42")
71+
System.setProperty('runtime.java.25.build', "13")
72+
def resolver = resolverImplementation()
73+
74+
when:
75+
Optional<JavaToolchainDownload> download = resolver.resolve(
76+
request(
77+
JavaLanguageVersion.of(version),
78+
vendor,
79+
platform(os, arch)
80+
)
81+
)
82+
83+
then:
84+
download.get().uri == URI.create(expectedUrl)
85+
86+
where:
87+
version | vendor | os | arch | expectedUrl
88+
24 | ORACLE | MAC_OS | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_macos-x64_bin.tar.gz"
89+
24 | ORACLE | MAC_OS | AARCH64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_macos-aarch64_bin.tar.gz"
90+
24 | ORACLE | LINUX | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_linux-x64_bin.tar.gz"
91+
24 | ORACLE | LINUX | AARCH64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_linux-aarch64_bin.tar.gz"
92+
24 | ORACLE | WINDOWS | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_windows-x64_bin.zip"
93+
24 | anyVendor() | MAC_OS | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_macos-x64_bin.tar.gz"
94+
24 | anyVendor() | MAC_OS | AARCH64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_macos-aarch64_bin.tar.gz"
95+
24 | anyVendor() | LINUX | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_linux-x64_bin.tar.gz"
96+
24 | anyVendor() | LINUX | AARCH64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_linux-aarch64_bin.tar.gz"
97+
24 | anyVendor() | WINDOWS | X86_64 | urlPrefix(24) + "42/GPL/openjdk-24-ea+42_windows-x64_bin.zip"
98+
25 | ORACLE | MAC_OS | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_macos-x64_bin.tar.gz"
99+
25 | ORACLE | MAC_OS | AARCH64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_macos-aarch64_bin.tar.gz"
100+
25 | ORACLE | LINUX | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_linux-x64_bin.tar.gz"
101+
25 | ORACLE | LINUX | AARCH64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_linux-aarch64_bin.tar.gz"
102+
25 | ORACLE | WINDOWS | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_windows-x64_bin.zip"
103+
25 | anyVendor() | MAC_OS | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_macos-x64_bin.tar.gz"
104+
25 | anyVendor() | MAC_OS | AARCH64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_macos-aarch64_bin.tar.gz"
105+
25 | anyVendor() | LINUX | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_linux-x64_bin.tar.gz"
106+
25 | anyVendor() | LINUX | AARCH64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_linux-aarch64_bin.tar.gz"
107+
25 | anyVendor() | WINDOWS | X86_64 | urlPrefix(25) + "13/GPL/openjdk-25-ea+13_windows-x64_bin.zip"
108+
}
109+
110+
private static String urlPrefix(int i) {
111+
return "https://download.java.net/java/early_access/jdk" + i + "/"
58112
}
59113

60114
def unsupportedRequests() {
61-
[
62-
[20, ORACLE, WINDOWS, AARCH64]
63-
]
115+
[[20, ORACLE, WINDOWS, AARCH64]]
64116
}
65117

66118
}

0 commit comments

Comments
 (0)