private Set doFindJdks()

in src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java [405:474]


    private Set<Path> doFindJdks() {
        List<Path> dirsToTest = new ArrayList<>();

        // add current JDK
        dirsToTest.add(Paths.get(System.getProperty(JAVA_HOME)));

        // check environment variables for JAVA{xx}_HOME
        System.getenv().entrySet().stream()
                .filter(e -> e.getKey().startsWith("JAVA") && e.getKey().endsWith("_HOME"))
                .map(e -> Paths.get(e.getValue()))
                .forEach(dirsToTest::add);

        final Path userHome = Paths.get(System.getProperty(USER_HOME));
        List<Path> installedDirs = new ArrayList<>();

        // JDK installed by third-party tool managers
        installedDirs.add(userHome.resolve(".jdks"));
        installedDirs.add(userHome.resolve(".m2").resolve("jdks"));
        installedDirs.add(userHome.resolve(".sdkman").resolve("candidates").resolve("java"));
        installedDirs.add(userHome.resolve(".gradle").resolve("jdks"));
        installedDirs.add(userHome.resolve(".jenv").resolve("versions"));
        installedDirs.add(userHome.resolve(".jbang").resolve("cache").resolve("jdks"));
        installedDirs.add(userHome.resolve(".asdf").resolve("installs"));
        installedDirs.add(userHome.resolve(".jabba").resolve("jdk"));

        // OS related directories
        String osname = System.getProperty("os.name").toLowerCase(Locale.ROOT);
        boolean macos = osname.startsWith("mac");
        boolean win = osname.startsWith("win");
        if (macos) {
            installedDirs.add(Paths.get("/Library/Java/JavaVirtualMachines"));
            installedDirs.add(userHome.resolve("Library/Java/JavaVirtualMachines"));
        } else if (win) {
            installedDirs.add(Paths.get("C:\\Program Files\\Java\\"));
            Path scoop = userHome.resolve("scoop").resolve("apps");
            if (Files.isDirectory(scoop)) {
                try (Stream<Path> stream = Files.list(scoop)) {
                    stream.forEach(installedDirs::add);
                } catch (IOException e) {
                    // ignore
                }
            }
        } else {
            installedDirs.add(Paths.get("/usr/jdk"));
            installedDirs.add(Paths.get("/usr/java"));
            installedDirs.add(Paths.get("/opt/java"));
            installedDirs.add(Paths.get("/usr/lib/jvm"));
        }

        for (Path dest : installedDirs) {
            if (Files.isDirectory(dest)) {
                try (Stream<Path> stream = Files.list(dest)) {
                    stream.forEach(dir -> {
                        dirsToTest.add(dir);
                        if (macos) {
                            dirsToTest.add(dir.resolve("Contents").resolve("Home"));
                        }
                    });
                } catch (IOException e) {
                    // ignore
                }
            }
        }

        // only keep directories that have a javac file
        return dirsToTest.stream()
                .filter(ToolchainDiscoverer::hasJavaC)
                .map(ToolchainDiscoverer::getCanonicalPath)
                .collect(Collectors.toSet());
    }