in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java [2362:2424]
private JdkAttributes getEffectiveJvm() throws MojoFailureException {
if (isNotEmpty(getJvm())) {
File pathToJava = new File(getJvm()).getAbsoluteFile();
if (!endsWithJavaPath(pathToJava.getPath())) {
throw new MojoFailureException(
"Given path does not end with java executor \"" + pathToJava.getPath() + "\".");
}
if (!(pathToJava.isFile()
|| "java".equals(pathToJava.getName())
&& pathToJava.getParentFile().isDirectory())) {
throw new MojoFailureException(
"Given path to java executor does not exist \"" + pathToJava.getPath() + "\".");
}
File jdkHome = toJdkHomeFromJvmExec(pathToJava.getPath());
if (jdkHome == null) {
getConsoleLogger().warning("Cannot determine JAVA_HOME of jvm exec path " + pathToJava);
} else if (!getEnvironmentVariables().containsKey("JAVA_HOME")) {
getEnvironmentVariables().put("JAVA_HOME", jdkHome.getAbsolutePath());
}
BigDecimal version = jdkHome == null ? null : toJdkVersionFromReleaseFile(jdkHome);
boolean javaVersion9 = version == null ? isJava9AtLeast(pathToJava.getPath()) : isJava9AtLeast(version);
return new JdkAttributes(pathToJava, jdkHome, javaVersion9);
}
if (toolchain != null) {
String jvmToUse = toolchain.findTool("java");
if (isNotEmpty(jvmToUse)) {
boolean javaVersion9 = false;
String jdkHome = null;
if (toolchain instanceof DefaultToolchain) {
DefaultToolchain defaultToolchain = (DefaultToolchain) toolchain;
javaVersion9 = defaultToolchain.matchesRequirements(JAVA_9_MATCHER)
|| defaultToolchain.matchesRequirements(JAVA_9_MATCHER_OLD_NOTATION);
}
if (toolchain instanceof DefaultJavaToolChain) {
DefaultJavaToolChain defaultJavaToolChain = (DefaultJavaToolChain) toolchain;
if (!getEnvironmentVariables().containsKey("JAVA_HOME")) {
jdkHome = defaultJavaToolChain.getJavaHome();
getEnvironmentVariables().put("JAVA_HOME", jdkHome);
}
}
if (!javaVersion9) {
javaVersion9 = isJava9AtLeast(jvmToUse);
}
return new JdkAttributes(
new File(jvmToUse),
jdkHome == null ? toJdkHomeFromJvmExec(jvmToUse) : new File(jdkHome),
javaVersion9);
}
}
// use the same JVM as the one used to run Maven (the "java.home" one)
String jvmToUse = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
getConsoleLogger().debug("Using JVM: " + jvmToUse + " with Java version " + JAVA_RECENT);
return new JdkAttributes(jvmToUse, isBuiltInJava9AtLeast());
}