commons-exec Siegfried Goeschl Renamed EnvironmentUtil to EnvironmentUtils to align with other classes in this project and commons in general. Please note that this change could break existing clients (but would be rather unlikely). Make environment variables respect casing rules of platforms. Under Windows "PATH", "Path" and "path" would access the same environment variable whereas the real name is "Path". Invoking DefaultExecutor.execute(CommandLine command, Map environment) using a 'null' Map results in inheriting all environment variables of the current process while passing an empty map implies starting the new process with no environment variables. In short 'null' is not the same as an empty map. Added one additional test : DefaultExecutorTest.testExecuteWithFancyArg Using variable substitution within CommandLine broke the regression tests under Windows. Found also another bug when calling CommandLine.getExecutable() the result was not substituted at all. As a general rule we do variable substitution and file separator fixing on the command line executable and variable substitution but NO file separator fixing for the command line arguments. Added convinience method to add two parameters to the CommandLine using one method invocation. Implemented better regression test for OpenVMS affecting also the Executor and CommandLauncher interface. Added test scripts for OpenVMS - he seems to be the last human having access to an OpenVMS box ... :-) With the help of the Apache Commons community I added the first results of cross-OS testing. The regression tests now also works on Windows - so it should work now on Linux, Windows and Mac OS X Added DebugUtils to improve cross-platform testing. Removed commons-logging integration Made DefaultExecutor.launch() protected to enable mocking. Made ProcessDestroyer optional and pluggable when using Executor. CommandLine can now expand the given command line by a user-suppied map. This allows to execute something like "${JAVA_HOME}/bin/java -jar ${myapp}" Added methods to provide pre-quoted arguments. Exposing a ExecuteWatchdog.destroy() to kill an asynchrounous process manually. This formalizes a workaround described in the JIRA Extending exit value handling to support applications returning an error code. Cleaned up the source code to get rid of javadoc errors and unused imports. Added a few regression tests for the watchdog since they were missing.