|
@@ -61,6 +61,9 @@ import org.gradle.util.GradleVersion
|
|
|
import java.nio.charset.StandardCharsets
|
|
|
import java.time.ZoneOffset
|
|
|
import java.time.ZonedDateTime
|
|
|
+import java.util.concurrent.ExecutorService
|
|
|
+import java.util.concurrent.Executors
|
|
|
+import java.util.concurrent.Future
|
|
|
import java.util.regex.Matcher
|
|
|
|
|
|
/**
|
|
@@ -153,8 +156,12 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
runtimeJavaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, runtimeJavaHome))
|
|
|
}
|
|
|
|
|
|
- String inFipsJvmScript = 'print(java.security.Security.getProviders()[0].name.toLowerCase().contains("fips"));'
|
|
|
- boolean inFipsJvm = Boolean.parseBoolean(runJavaAsScript(project, runtimeJavaHome, inFipsJvmScript))
|
|
|
+ boolean inFipsJvm = false
|
|
|
+ if (new File(runtimeJavaHome).canonicalPath != gradleJavaHome.canonicalPath) {
|
|
|
+ // We don't expect Gradle to be running in a FIPS JVM
|
|
|
+ String inFipsJvmScript = 'print(java.security.Security.getProviders()[0].name.toLowerCase().contains("fips"));'
|
|
|
+ inFipsJvm = Boolean.parseBoolean(runJavaAsScript(project, runtimeJavaHome, inFipsJvmScript))
|
|
|
+ }
|
|
|
|
|
|
// Build debugging info
|
|
|
println '======================================='
|
|
@@ -190,24 +197,38 @@ class BuildPlugin implements Plugin<Project> {
|
|
|
throw new GradleException(message)
|
|
|
}
|
|
|
|
|
|
- for (final Map.Entry<Integer, String> javaVersionEntry : javaVersions.entrySet()) {
|
|
|
- final String javaHome = javaVersionEntry.getValue()
|
|
|
- if (javaHome == null) {
|
|
|
- continue
|
|
|
- }
|
|
|
- JavaVersion javaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, javaHome))
|
|
|
- final JavaVersion expectedJavaVersionEnum
|
|
|
- final int version = javaVersionEntry.getKey()
|
|
|
- if (version < 9) {
|
|
|
- expectedJavaVersionEnum = JavaVersion.toVersion("1." + version)
|
|
|
- } else {
|
|
|
- expectedJavaVersionEnum = JavaVersion.toVersion(Integer.toString(version))
|
|
|
- }
|
|
|
- if (javaVersionEnum != expectedJavaVersionEnum) {
|
|
|
- final String message =
|
|
|
- "the environment variable JAVA" + version + "_HOME must be set to a JDK installation directory for Java" +
|
|
|
- " ${expectedJavaVersionEnum} but is [${javaHome}] corresponding to [${javaVersionEnum}]"
|
|
|
- throw new GradleException(message)
|
|
|
+ ExecutorService exec = Executors.newFixedThreadPool(javaVersions.size())
|
|
|
+ Set<Future<Void>> results = new HashSet<>()
|
|
|
+
|
|
|
+ javaVersions.entrySet().stream()
|
|
|
+ .filter { it.getValue() != null }
|
|
|
+ .forEach { javaVersionEntry ->
|
|
|
+ results.add(exec.submit {
|
|
|
+ final String javaHome = javaVersionEntry.getValue()
|
|
|
+ final int version = javaVersionEntry.getKey()
|
|
|
+ if (project.file(javaHome).exists() == false) {
|
|
|
+ throw new GradleException("Invalid JAVA${version}_HOME=${javaHome} location does not exist")
|
|
|
+ }
|
|
|
+
|
|
|
+ JavaVersion javaVersionEnum = JavaVersion.toVersion(findJavaSpecificationVersion(project, javaHome))
|
|
|
+ final JavaVersion expectedJavaVersionEnum = version < 9 ?
|
|
|
+ JavaVersion.toVersion("1." + version) :
|
|
|
+ JavaVersion.toVersion(Integer.toString(version))
|
|
|
+
|
|
|
+ if (javaVersionEnum != expectedJavaVersionEnum) {
|
|
|
+ final String message =
|
|
|
+ "the environment variable JAVA" + version + "_HOME must be set to a JDK installation directory for Java" +
|
|
|
+ " ${expectedJavaVersionEnum} but is [${javaHome}] corresponding to [${javaVersionEnum}]"
|
|
|
+ throw new GradleException(message)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ project.gradle.taskGraph.whenReady {
|
|
|
+ try {
|
|
|
+ results.forEach { it.get() }
|
|
|
+ } finally {
|
|
|
+ exec.shutdown();
|
|
|
}
|
|
|
}
|
|
|
|