Skip to content

Commit 056194f

Browse files
authored
Improove the configuration time if the build (#41251)
This will help with reproduction lines and running tests form IDEs and other operations that are quick and executed often enough for the configuration time to matter. Running Gradle with a FIPS JVM is not supproted, so if the runtime JVM is the same one, no need to spend time checking for fips support. Verification of the JAVA<version>_HOME env vars is now async and parallel so it doesn't block configuration.
1 parent 2d29807 commit 056194f

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ import org.gradle.util.GradleVersion
6161
import java.nio.charset.StandardCharsets
6262
import java.time.ZoneOffset
6363
import java.time.ZonedDateTime
64+
import java.util.concurrent.ExecutorService
65+
import java.util.concurrent.Executors
66+
import java.util.concurrent.Future
6467
import java.util.regex.Matcher
6568

6669
/**
@@ -153,8 +156,12 @@ class BuildPlugin implements Plugin<Project> {
153156
runtimeJavaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, runtimeJavaHome))
154157
}
155158

156-
String inFipsJvmScript = 'print(java.security.Security.getProviders()[0].name.toLowerCase().contains("fips"));'
157-
boolean inFipsJvm = Boolean.parseBoolean(runJavaAsScript(project, runtimeJavaHome, inFipsJvmScript))
159+
boolean inFipsJvm = false
160+
if (new File(runtimeJavaHome).canonicalPath != gradleJavaHome.canonicalPath) {
161+
// We don't expect Gradle to be running in a FIPS JVM
162+
String inFipsJvmScript = 'print(java.security.Security.getProviders()[0].name.toLowerCase().contains("fips"));'
163+
inFipsJvm = Boolean.parseBoolean(runJavaAsScript(project, runtimeJavaHome, inFipsJvmScript))
164+
}
158165

159166
// Build debugging info
160167
println '======================================='
@@ -190,24 +197,38 @@ class BuildPlugin implements Plugin<Project> {
190197
throw new GradleException(message)
191198
}
192199

193-
for (final Map.Entry<Integer, String> javaVersionEntry : javaVersions.entrySet()) {
194-
final String javaHome = javaVersionEntry.getValue()
195-
if (javaHome == null) {
196-
continue
197-
}
198-
JavaVersion javaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, javaHome))
199-
final JavaVersion expectedJavaVersionEnum
200-
final int version = javaVersionEntry.getKey()
201-
if (version < 9) {
202-
expectedJavaVersionEnum = JavaVersion.toVersion("1." + version)
203-
} else {
204-
expectedJavaVersionEnum = JavaVersion.toVersion(Integer.toString(version))
205-
}
206-
if (javaVersionEnum != expectedJavaVersionEnum) {
207-
final String message =
208-
"the environment variable JAVA" + version + "_HOME must be set to a JDK installation directory for Java" +
209-
" ${expectedJavaVersionEnum} but is [${javaHome}] corresponding to [${javaVersionEnum}]"
210-
throw new GradleException(message)
200+
ExecutorService exec = Executors.newFixedThreadPool(javaVersions.size())
201+
Set<Future<Void>> results = new HashSet<>()
202+
203+
javaVersions.entrySet().stream()
204+
.filter { it.getValue() != null }
205+
.forEach { javaVersionEntry ->
206+
results.add(exec.submit {
207+
final String javaHome = javaVersionEntry.getValue()
208+
final int version = javaVersionEntry.getKey()
209+
if (project.file(javaHome).exists() == false) {
210+
throw new GradleException("Invalid JAVA${version}_HOME=${javaHome} location does not exist")
211+
}
212+
213+
JavaVersion javaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, javaHome))
214+
final JavaVersion expectedJavaVersionEnum = version < 9 ?
215+
JavaVersion.toVersion("1." + version) :
216+
JavaVersion.toVersion(Integer.toString(version))
217+
218+
if (javaVersionEnum != expectedJavaVersionEnum) {
219+
final String message =
220+
"the environment variable JAVA" + version + "_HOME must be set to a JDK installation directory for Java" +
221+
" ${expectedJavaVersionEnum} but is [${javaHome}] corresponding to [${javaVersionEnum}]"
222+
throw new GradleException(message)
223+
}
224+
})
225+
}
226+
227+
project.gradle.taskGraph.whenReady {
228+
try {
229+
results.forEach { it.get() }
230+
} finally {
231+
exec.shutdown();
211232
}
212233
}
213234

0 commit comments

Comments
 (0)