From 5ac4f80f7c1d6f3b493b44b48afd7a28a454277d Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Sun, 11 Aug 2024 09:55:58 +0200 Subject: [PATCH] Environment variable Path should be used as case-insensitive fix #438 --- .../java/org/codehaus/mojo/exec/ExecMojo.java | 15 +++++++++------ .../org/codehaus/mojo/exec/ExecMojoTest.java | 17 ++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/codehaus/mojo/exec/ExecMojo.java b/src/main/java/org/codehaus/mojo/exec/ExecMojo.java index 8d2f9bb5..740fb301 100644 --- a/src/main/java/org/codehaus/mojo/exec/ExecMojo.java +++ b/src/main/java/org/codehaus/mojo/exec/ExecMojo.java @@ -36,6 +36,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.function.Consumer; @@ -488,8 +489,7 @@ private Map handleSystemEnvVariables() throws MojoExecutionExcep } if (this.getLog().isDebugEnabled()) { - Set keys = new TreeSet<>(); - keys.addAll(enviro.keySet()); + Set keys = new TreeSet<>(enviro.keySet()); for (String key : keys) { this.getLog().debug("env: " + key + "=" + enviro.get(key)); } @@ -825,10 +825,13 @@ private List getExecutablePaths(Map enviro) { List paths = new ArrayList<>(); paths.add(""); - String path = enviro.get("PATH"); - if (path != null) { - paths.addAll(Arrays.asList(StringUtils.split(path, File.pathSeparator))); - } + enviro.entrySet().stream() + .filter(entry -> "PATH".equalsIgnoreCase(entry.getKey())) + .map(Map.Entry::getValue) + .filter(Objects::nonNull) + .map(path -> path.split(File.pathSeparator)) + .map(Arrays::asList) + .forEach(paths::addAll); return paths; } diff --git a/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java b/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java index 3a0773a2..61d7052c 100644 --- a/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java +++ b/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java @@ -144,17 +144,20 @@ public void testGetExecutablePath() throws IOException { final String comSpec = System.getenv("ComSpec"); + // for windows scripts cmd should be used realMojo.setExecutable("javax.bat"); cmd = realMojo.getExecutablePath(enviro, workdir); - assertTrue( - "is bat file on windows, execute using ComSpec.", - cmd.getExecutable().equals(comSpec)); + assertEquals("is bat file on windows, execute using ComSpec.", comSpec, cmd.getExecutable()); + assertEquals("is /c argument pass using ComSpec.", "/c", cmd.getArguments()[0]); - enviro.put("PATH", workdir.getAbsolutePath() + File.separator + "target"); + String path = workdir.getAbsolutePath() + File.separator + "target"; + enviro.put("Path", path); + realMojo.setExecutable("javax"); // FIXME javax.bat should be also allowed cmd = realMojo.getExecutablePath(enviro, workdir); - assertTrue( - "is bat file on windows' PATH, execute using ComSpec.", - cmd.getExecutable().equals(comSpec)); + assertEquals("is bat file on windows, execute using ComSpec.", comSpec, cmd.getExecutable()); + assertEquals("is /c argument pass using ComSpec.", "/c", cmd.getArguments()[0]); + assertEquals("full path is discovered.", path + File.separator + "javax.bat", cmd.getArguments()[1]); + f.delete(); assertFalse("file deleted...", f.exists()); }