@@ -31,6 +31,8 @@ public ProcessExecutionException(Throwable cause) {
3131}
3232
3333final class ProcessExecutor {
34+ private final static String PATH_ENV_VAR = "PATH" ;
35+
3436 private final Map <String , String > environment ;
3537 private CommandLine commandLine ;
3638 private final Executor executor ;
@@ -96,33 +98,38 @@ private CommandLine createCommandLine(List<String> command) {
9698 return commmandLine ;
9799 }
98100
99- private Map <String , String > createEnvironment (List <String > paths , Platform platform , Map <String , String > additionalEnvironment ) {
101+ private Map <String , String > createEnvironment (final List <String > paths , final Platform platform , final Map <String , String > additionalEnvironment ) {
100102 final Map <String , String > environment = new HashMap <>(System .getenv ());
101- String pathVarName = "PATH" ;
102- String pathVarValue = environment .get (pathVarName );
103+
104+ if (additionalEnvironment != null ) {
105+ environment .putAll (additionalEnvironment );
106+ }
107+
103108 if (platform .isWindows ()) {
104- for (Map .Entry <String , String > entry : environment .entrySet ()) {
105- if ("PATH" .equalsIgnoreCase (entry .getKey ())) {
106- pathVarName = entry .getKey ();
107- pathVarValue = entry .getValue ();
109+ for (final Map .Entry <String , String > entry : environment .entrySet ()) {
110+ final String pathName = entry .getKey ();
111+ if (PATH_ENV_VAR .equalsIgnoreCase (pathName )) {
112+ final String pathValue = entry .getValue ();
113+ environment .put (pathName , extendPathVariable (pathValue , paths ));
108114 }
109115 }
116+ } else {
117+ final String pathValue = environment .get (PATH_ENV_VAR );
118+ environment .put (PATH_ENV_VAR , extendPathVariable (pathValue , paths ));
110119 }
111120
112- StringBuilder pathBuilder = new StringBuilder ();
113- if (pathVarValue != null ) {
114- pathBuilder .append (pathVarValue ).append (File .pathSeparator );
115- }
116- for (String path : paths ) {
117- pathBuilder .insert (0 , File .pathSeparator ).insert (0 , path );
118- }
119- environment .put (pathVarName , pathBuilder .toString ());
121+ return environment ;
122+ }
120123
121- if (additionalEnvironment != null ) {
122- environment .putAll (additionalEnvironment );
124+ private String extendPathVariable (final String existingValue , final List <String > paths ) {
125+ final StringBuilder pathBuilder = new StringBuilder ();
126+ for (final String path : paths ) {
127+ pathBuilder .append (path ).append (File .pathSeparator );
123128 }
124-
125- return environment ;
129+ if (existingValue != null ) {
130+ pathBuilder .append (existingValue ).append (File .pathSeparator );
131+ }
132+ return pathBuilder .toString ();
126133 }
127134
128135 private Executor createExecutor (File workingDirectory , long timeoutInSeconds ) {
0 commit comments