@@ -61,6 +61,9 @@ import org.gradle.util.GradleVersion
61
61
import java.nio.charset.StandardCharsets
62
62
import java.time.ZoneOffset
63
63
import java.time.ZonedDateTime
64
+ import java.util.concurrent.ExecutorService
65
+ import java.util.concurrent.Executors
66
+ import java.util.concurrent.Future
64
67
import java.util.regex.Matcher
65
68
66
69
/**
@@ -153,8 +156,12 @@ class BuildPlugin implements Plugin<Project> {
153
156
runtimeJavaVersionEnum = JavaVersion . toVersion(findJavaSpecificationVersion(project, runtimeJavaHome))
154
157
}
155
158
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
+ }
158
165
159
166
// Build debugging info
160
167
println ' ======================================='
@@ -190,24 +197,38 @@ class BuildPlugin implements Plugin<Project> {
190
197
throw new GradleException (message)
191
198
}
192
199
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();
211
232
}
212
233
}
213
234
0 commit comments