[ https://issues.apache.org/jira/browse/MTOOLCHAINS-49?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17823888#comment-17823888 ]
ASF GitHub Bot commented on MTOOLCHAINS-49: ------------------------------------------- mthmulders commented on code in PR #14: URL: https://github.com/apache/maven-toolchains-plugin/pull/14#discussion_r1513962159 ########## src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java: ########## @@ -411,10 +411,12 @@ private Set<Path> findJdks() { installedDirs.add(Paths.get(userHome, "Library/Java/JavaVirtualMachines")); } else if (win) { installedDirs.add(Paths.get("C:\\Program Files\\Java\\")); - Path scoop = Paths.get(userHome, "scoop/apps"); + Path scoop = Paths.get(userHome, "scoop", "apps"); if (Files.isDirectory(scoop)) { try (Stream<Path> stream = Files.list(scoop)) { - stream.forEach(dirsToTest::add); + // Scoop can install multiple versions of a Java distribution, we only take the one that is + // currently selected. + stream.map(path -> Paths.get(path.toString(), "current")).forEach(dirsToTest::add); Review Comment: Please see [this gist](https://gist.github.com/mthmulders/3c13223127254ace12190b9927940ee3). To create it, I've added some debug logging to print which directories indeed contain `bin/javac` or `bin/javac.exe`. I did that after the `filter` in line 444 to not print all packages I have installed that aren't a Java runtime. If we only look at `Paths.get(userHome, "scoop", "apps");`, we will miss all installed runtimes - only the "current" one (which `JAVA_HOME` points to) will be detected. This is [file-inspect-scoop-apps-packagename-txt](https://gist.github.com/mthmulders/3c13223127254ace12190b9927940ee3#file-inspect-scoop-apps-packagename-txt). Looking at the `current` directory under each installed package will make the code detect the current version of each installed Java runtime. So that is a lot more, but still not all. This is [inspect-scoop-apps-packagename-current-txt](https://gist.github.com/mthmulders/3c13223127254ace12190b9927940ee3#file-inspect-scoop-apps-packagename-current-txt). To find all of them (as you wrote), we'd need to look at each subdirectory of an installed package. It will incur a lot of disk scanning, because it will inspect each installed version of each Scoop package, but it will even detect multiple versions of the same Java runtime (see openjdk21, microsoft17-jdk). This is [inspect-scoop-apps-packagename-all-subdirs-txt](https://gist.github.com/mthmulders/3c13223127254ace12190b9927940ee3#file-inspect-scoop-apps-packagename-all-subdirs-txt). It will also report the *current* version of that package (so that's a duplicate), but we could filter those out I believe. > Automatic discovery of JDK toolchains > ------------------------------------- > > Key: MTOOLCHAINS-49 > URL: https://issues.apache.org/jira/browse/MTOOLCHAINS-49 > Project: Maven Toolchains Plugin > Issue Type: Improvement > Reporter: Guillaume Nodet > Assignee: Guillaume Nodet > Priority: Major > -- This message was sent by Atlassian Jira (v8.20.10#820010)