<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   https://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<document xmlns="http://maven.apache.org/changes/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons Exec Release Notes</title>
  </properties>
  <body>
    <release version="1.6.0" date="2025-11-25" description="This is a feature and maintenance release. Java 8 or later is required.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Watchdog.builder().get() now uses a default timeout of 30 seconds instead of throwing a NullPointerException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ExecuteWatchdog.builder().get() now uses a default timeout of 30 seconds instead of throwing a NullPointerException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Calling org.apache.commons.exec.Watchdog.Builder.setTimeout(Duration) with null now resets to the default INFINITE_TIMEOUT_DURATION timeout.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Calling org.apache.commons.exec.ExecuteWatchdog.Builder.setTimeout(Duration) with null now resets to the default INFINITE_TIMEOUT_DURATION timeout.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Calling org.apache.commons.exec.Watchdog.Builder.setThreadFactory(ThreadFactory) with null now resets to the default java.util.concurrent.Executors.defaultThreadFactory().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Calling org.apache.commons.exec.ExecuteWatchdog.Builder.setThreadFactory(ThreadFactory) with null now resets to the default java.util.concurrent.Executors.defaultThreadFactory().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Checkstyle issues.</action>
      <action type="fix" dev="ggregory" due-to="Xin Wang, Sebb, Gary Gregory">Fix StringUtils.quoteArgument(String) when input contains single and double quotes #309.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Apache RAT plugin console warnings.</action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">TimeoutObserver now extends Consumer&lt;Watchdog&gt;.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.exec.Watchdog.getTimeout().</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-parent from 83 to 93 #299, #308, #314, #316.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.20.0 #282.</action>
    </release>
    <release version="1.5.0" date="2025-05-16" description="This is a feature and maintenance release. Java 8 or later is required.">
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add Maven property project.build.outputTimestamp for build reproducibility.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add CommandLine.CommandLine(Path).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add Executor.getWorkingDirectoryPath().</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add DefaultExecutor.Builder.setWorkingDirectory(Path).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add CommandLauncher.exec(CommandLine, Map&lt;String, String&gt;, Path).</action>
      <!-- FIX -->
      <action type="fix" dev="ggregory" issue="EXEC-122" due-to="Marcono1234">Document PumpStreamHandler stream thread-safety requirements.</action>
      <action type="fix" dev="ggregory" due-to="Marcono1234">Fix CI only running on Ubuntu and improve OS-specific tests #143.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in DefaultExecutor.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD EmptyCatchBlock by allowing commented blocks.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD EmptyControlStatement by allowing commented blocks.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Replace OS.OS_* use of Locale.ENGLISH with Locale.ROOT.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate DebugUtils.DebugUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate MapUtils.MapUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate StringUtils.StringUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Javadoc warnings.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory, SpotBugs">Fix SpotBugs AT_STALE_THREAD_WRITE_OF_PRIMITIVE: Shared primitive variable "shouldDestroy" in one thread may not yield the value of the most recent write from another thread [org.apache.commons.exec.ShutdownHookProcessDestroyer$ProcessDestroyerThread].</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory, SpotBugs">Fix SpotBugs AT_STALE_THREAD_WRITE_OF_PRIMITIVE: Shared primitive variable "added" in one thread may not yield the value of the most recent write from another thread [org.apache.commons.exec.ShutdownHookProcessDestroyer].</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-parent from 65 to 83 #174, #204, #212, #214, #219, #223, #226, #233, #253.</action>
      <!-- REMOVE -->
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Remove obsolete and unmaintained Ant build file.</action>
    </release>
    <release version="1.4.0" date="2024-01-01" description="This is a feature and maintenance release. Java 8 or later is required.">
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add ShutdownHookProcessDestroyer.isEmpty().</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add DefaultExecuteResultHandler.waitFor(Duration).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add Watchdog.Watchdog(Duration).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add ExecuteWatchdog.ExecuteWatchdog(Duration).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add PumpStreamHandler.setStopTimeout(Duration) and deprecate PumpStreamHandler.setStopTimeout(long).</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add DefaultExecutor.Builder.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add DaemonExecutor.Builder.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add ExecuteWatchdog.Builder.</action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add Watchdog.Builder.</action>
      <!-- FIX -->
      <action issue="EXEC-105" type="fix" due-to="Dimitrios Efthymiou">Fix code snippet in tutorial page.</action>
      <action issue="EXEC-100" dev="sgoeschl" type="fix" date="2016-01-11">Sync org.apache.commons.exec.OS with the newest Ant source file.</action>
      <action issue="EXEC-64" dev="sebb" type="fix" due-to="Michael Vorburger">DefaultExecutor swallows IOException cause instead of propagating it (work-round for Java 1.5).</action>
      <action type="fix" dev="ggregory" due-to="nullptr">Java-style Array declaration and remove empty finally block #26.</action>
      <action type="fix" dev="ggregory" due-to="John Patrick">Use JUnit 5 assertThrows() #72.</action>
      <action type="fix" dev="ggregory" due-to="step-security-bot, Gary Gregory">[StepSecurity] ci: Harden GitHub Actions #107.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Port from JUnit 4 to 5.</action>
      <action type="fix" dev="ggregory" due-to="ArdenL-Liu, Gary Gregory">[Javadoc] CommandLine.toCleanExecutable(final String dirtyExecutable) IllegalArgumentException #61.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ExecuteException propagates its cause to its IOException superclass.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Propagate exception in DebugUtils.handleException(String, Exception).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate StringUtils.toString(String[], String) in favor of String.join(CharSequence, CharSequence...).</action>
      <action issue="EXEC-78" dev="ggregory" type="fix">No need to use System.class.getMethod("getenv",...) any more.</action>
      <action issue="EXEC-70" dev="ggregory" type="fix">Delegate thread creation to java.util.concurrent.ThreadFactory.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Avoid NullPointerException in MapUtils.prefix(Map, String).</action>
      <!-- REMOVE -->
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Deprecate DefaultExecuteResultHandler.waitFor(long).</action>
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Deprecate ExecuteWatchdog.ExecuteWatchdog(long).</action>
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Deprecate Watchdog.Watchdog(long).</action>
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Drop obsolete and unmaintained Ant build.</action>
      <action type="remove" dev="ggregory" due-to="Gary Gregory">Drop CLIRR plugin, replaced by JApiCmp.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump github actions #52.</action>
      <action issue="EXEC-111" type="update" dev="ggregory" due-to="Gary Gregory">Update from Java 5 to 6.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Update from Java 7 to 8.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump actions/cache from 2 to 3.0.11 #48, #51, #55, #69.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump actions/checkout from 2.3.2 to 3.1.0 #24, #46, #68.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump actions/setup-java from 1.4.0 to 3.8.0 #21, #50, #70, #78.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump junit from 4.13 to 5.9.1 Vintage #23, #33.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump maven-pmd-plugin from 2.7.1 to 3.19.0 #45, #62.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump maven-checkstyle-plugin from 2.13 to 3.2.0 #29, #60.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump commons-parent from 52 to 65, #49, #65, #79, #88, #105, #137.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump japicmp-maven-plugin from 0.15.6 to 0.16.0.</action>
    </release>
    <release version="1.3" date="2014-11-02" description="Maintenance and feature Release">
      <action issue="EXEC-69" type="add" dev="ggregory" due-to="Richard Atkins, Michael Vorburger">
                DefaultExecutor async execute prevents shutdown hooks running.
            </action>
      <action issue="EXEC-81" type="fix" dev="ggregory" date="2014-02-04" due-to="Stephen Compall">
                Remove remaining raw types, unchecked conversions
            </action>
      <action issue="EXEC-80" type="fix" dev="ggregory" date="2014-02-04">
                NullPointerException in EnvironmentUtils.toString(map)
            </action>
      <action issue="EXEC-78" dev="sebb" type="update" date="2014-01-11">
                No need to use System.class.getMethod("getenv",...) any more
            </action>
      <action issue="EXEC-77" dev="britter" type="update" date="2014-01-10">
                Update JUnit dependency to 4.11
            </action>
      <action issue="EXEC-76" dev="britter" type="update" date="2014-01-10">
                Update to Java 5
            </action>
    </release>
    <release version="1.2" date="2014-01-02" description="Maintenance and small feature Release">
      <action issue="EXEC-68" type="fix" dev="ggregory" date="2012-10-22" due-to="Joel McCance">
                Watchdog kills process immediately if timeout is too large.
            </action>
      <action issue="EXEC-57" dev="sgoeschl" type="fix" date="2011-10-10" due-to="Nickolay Martinov">
                Applied the patch from Nickolay Martinov but the timeout disguises the fact
                that the process might be still running. Therefore added a sanity check in
                order to throw an exception if the timeout for join() was exceeded.
            </action>
      <action issue="EXEC-60" dev="sgoeschl" type="fix" date="2011-10-09" due-to="Peter Kofler">
                Fixed deadlock by calling the timeout observers outside of the synchronized block thereby
                removing a prerequisite of a deadlock. Also added a test case to demonstrate that this
                problem is fixed (which of course can not guarantee the absence of a dead lock).
            </action>
      <action issue="EXEC-55" dev="sgoeschl" type="add" date="2011-02-21" due-to="Dominik Stadler">
                Set names for started threads.
            </action>
      <action issue="EXEC-52" dev="sebb" type="fix" date="2011-02-26" due-to="Nickolay Martinov">
                Tests fail on HP-UX, because it uses a different syntax for the ping command.
            </action>
      <action issue="EXEC-49" dev="sgoeschl" type="fix" date="2010-11-05" due-to="Kevin Telford">
                "Write dead end" IOException when using Piped streams w/PumpStreamHandler.
                When encountering a PipedOutputStream we will automatically close it to avoid
                the exception.
            </action>
      <action issue="EXEC-34" dev="simonetripodi" type="fix" date="2011-11-30" due-to="Marco Ferrante">
                Race condition prevent watchdog working using ExecuteStreamHandler.
                Patch submittd by Kristian Rosenvold.
            </action>
    </release>
    <release version="1.1" date="2010-10-08" description="Maintenance Release">
      <action dev="sebb" type="fix" date="2010-10-05">
                OpenVMS now uses symbols instead of logicals for environment variables.
            </action>
      <action dev="sgoeschl" type="add" date="2010-09-21">
                Adding 'Argument' class and quote the arguments after expansion.                
            </action>
      <action dev="sgoeschl" type="add" date="2010-09-02">
                Reverting changes of [EXEC-41] because the patch does not fix the problem.
                Also added test case for the broken patch.
            </action>
      <action dev="sgoeschl" type="add" date="2010-08-17">
                Added TutorialTest as a playground for new user and removed
                similar code from DefaultExecutorTest.
            </action>
      <action dev="sgoeschl" type="fix" date="2010-08-16">
                String substitution handles now java.io.File instances in order
                to create a cross-platform file name.            
            </action>
      <action dev="sgoeschl" type="fix" date="2010-08-16">
                The 'forever.bat' accidentally overwrite the 'forever.txt' instead of
                appending.
            </action>
      <action dev="sgoeschl" type="update" date="2010-08-16">
                DefaultExecutor() now sets the working directory with the current working
                directory.
            </action>
      <action dev="sgoeschl" type="update" date="2010-08-15">
                Added 'DefaultExecutorTest#testStdInHandling' to show how
                commons-exec can feed the 'stdin' of a child process.
            </action>
      <action dev="sgoeschl" type="update" date="2010-08-15" issue="EXEC-42" due-to="Konrad Windzus">
                Improved the documentation.
            </action>
      <action dev="sgoeschl" type="update" date="2010-08-15" issue="EXEC-41" due-to="Ernest Mishkin">
                Added a PumpStreamHandler.setAlwaysWaitForStreamThreads() which allows to skip
                joining with the pumper threads. Having said that - using that flag is for the
                desperate because it could leave up to three worker threads behind but there
                might be situations where this is the only escape.
            </action>
      <action dev="sgoeschl" type="fix" date="2010-08-15" issue="EXEC-46" due-to="Zimmermann Nir">
                Process.waitFor should clear interrupt status when throwing InterruptedException
            </action>
      <action dev="sgoeschl" type="update" date="2010-06-01">
                Added 'DefaultExecuteResultHandler'
            </action>
      <action dev="sgoeschl" type="update" date="2010-06-01" issue="EXEC-42" due-to="Pablo Hoertner">
                Added a new section to the tutorial to show working with asynchronous
                processes. Thanks to Pablo for providing this documentation update.
            </action>
      <action dev="sgoeschl" type="fix" date="2010-05-31" issue="EXEC-44">
                Because the ExecuteWatchdog is the only way to destroy asynchronous processes,
                it should be possible to set it to an infinite timeout, for processes which
                should not timeout, but manually destroyed under some circumstances.
            </action>
    </release>
    <release version="1.0.1" date="2009-09-28" description="Maintenance Release">
      <action dev="henrib" type="fix" date="2009-09-25" issue="EXEC-33">
                On a Mac, the unit tests never finish. Culprit is InputStreamPumper which
                sets its stop member in the run method; however, run might really be executed
                after the stopProcessing method is called if the process
                thread completes before the InputStreamPumper starts.
            </action>
      <action dev="sgoeschl" type="fix" due-to="Peter Henderson" issue="EXEC-40">
                Fixes NullPointerException in DefaultExecutor.setExitValues().
            </action>
      <action dev="sgoeschl" type="fix" due-to="Milos Kleint" issue="EXEC-33">
                Copies all data from an System.input stream to an output stream of
                the executed process.
            </action>
    </release>
    <release version="1.0" date="2009-03-15" description="First Public Release">
      <action dev="sgoeschl" type="fix" due-to="Sebastien Bazley" issue="EXEC-37">
                Removed useless synchronized statement in
                OpenVmsProcessingEnvironment.createProcEnvironment
            </action>
      <action dev="sgoeschl" type="fix" issue="EXEC-33">
                Using System.in for child process will actually hang your application -
                see JIRA for more details. Since there is no easy fix an
                IllegalRuntimeException is thrown when System.in is passed.
            </action>
      <action dev="sgoeschl" type="fix" due-to="Luc Maisonobe" issue="EXEC-35">
                Fixing a few findbugs issues.
            </action>
      <action dev="sgoeschl" type="fix" due-to="Marco Ferrante" issue="EXEC-32">
                Handle null streams consistently.
            </action>
      <action dev="sgoeschl" type="fix">
                After a long discussion we decided to stick to following groupId
                "org.apache.commons" instead of "commons-exec".
            </action>
      <action dev="sgoeschl" type="fix" due-to="Kevin Jackson">
                The Ant build now works even when junit is not on the classpath
            </action>
      <action dev="sgoeschl" type="fix">
                Fixed broken "groupId" from "org.apache.commons" to "commons-exec"
            </action>
      <action dev="sgoeschl" type="fix" issue="EXEC-27" due-to="Benjamin Bentmann">
                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).
            </action>
      <action dev="sgoeschl" type="fix" issue="EXEC-30" due-to="Benjamin Bentmann">
                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".
            </action>
      <action dev="sgoeschl" type="fix" issue="EXEC-31" due-to="Benjamin Bentmann">
                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.
            </action>
      <action dev="sgoeschl" type="add" issue="EXEC-26" due-to="Benjamin Bentmann">
                Added one additional test : DefaultExecutorTest.testExecuteWithFancyArg
            </action>
      <action dev="sgoeschl" issue="EXEC-25" type="fix">
                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.
            </action>
      <action dev="sgoeschl" type="add">
                Added convinience method to add two parameters to the CommandLine
                using one method invocation.
            </action>
      <action dev="sgoeschl" type="fix">
                Implemented better regression test for OpenVMS affecting also
                the Executor and CommandLauncher interface.
            </action>
      <action dev="sebb" type="add">
                Added test scripts for OpenVMS - he seems to be the last human
                having access to an OpenVMS box ... :-)
            </action>
      <action dev="sgoeschl" type="add" due-to="Simone Gianni,Bindul Bhowmik,Niall Pemberton,Sebastian Bazley">
                With the help of the Apache Commons community I added the first results
                of cross-OS testing.
            </action>
      <action dev="sgoeschl" type="add">
                The regression tests now also works on Windows - so it should
                work now on Linux, Windows and Mac OS X
            </action>
      <action dev="sgoeschl" type="add">
                Added DebugUtils to improve cross-platform testing.
            </action>
      <action dev="sgoeschl" type="remove">
                Removed commons-logging integration
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-62" due-to="Jeremy Lacoste">
                Made DefaultExecutor.launch() protected to enable mocking.
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-107" due-to="Niklas Gustavsson">
                Made ProcessDestroyer optional and pluggable when using Executor.
            </action>
      <action dev="sgoeschl" type="add">
                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}"
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-192" due-to="Reinhold Fuereder">
                Added methods to provide pre-quoted arguments.
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-193" due-to="Reinhold Fuereder">
                Exposing a ExecuteWatchdog.destroy() to kill an asynchrounous process
                manually. This formalizes a workaround described in the JIRA
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-203">
                Extending exit value handling to support applications returning an error
                code.
            </action>
      <action dev="sgoeschl" type="fix" issue="SANDBOX-204">
                Cleaned up the source code to get rid of javadoc errors and
                unused imports.
            </action>
      <action dev="sgoeschl" type="add" issue="SANDBOX-204">
                Added a few regression tests for the watchdog since they were missing.
            </action>
    </release>
  </body>
</document>
