private JdkAttributes getEffectiveJvm()

in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java [2482:2544]


    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());
    }