[ 
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)

Reply via email to