diff --git a/src/main/java/org/codehaus/mojo/exec/ExecMojo.java b/src/main/java/org/codehaus/mojo/exec/ExecMojo.java index 8d2f9bb5..cac4b1d7 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)); } @@ -759,9 +759,11 @@ CommandLine getExecutablePath(Map enviro, File dir) { } else { if (OS.isFamilyWindows()) { List paths = this.getExecutablePaths(enviro); + System.out.println("win paths: " + paths); paths.add(0, dir.getAbsolutePath()); exec = findExecutable(executable, paths); + System.out.println("win exec: " + exec); } } } @@ -825,10 +827,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..42e2d9ea 100644 --- a/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java +++ b/src/test/java/org/codehaus/mojo/exec/ExecMojoTest.java @@ -146,15 +146,16 @@ public void testGetExecutablePath() throws IOException { 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); 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' PATH, 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()); }