blob: 9460407993d9b071e9e243cbf4d5a6b465f32fed [file] [log] [blame]
<?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
http://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/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
<properties>
<title>Apache Commons Exec Release Notes</title>
</properties>
<body>
<release version="1.4.1" date="20YY-MM-DD" description="Maintenance and feature Release (Java 8 or above)">
<!-- ADD -->
<action dev="ggregory" type="add" due-to="Gary Gregory">Add Maven property project.build.outputTimestamp for build reproducibility.</action>
<!-- FIX -->
<action dev="ggregory" type="fix" issue="EXEC-122" due-to="Marcono1234">Document PumpStreamHandler stream thread-safety requirements.</action>
<action dev="ggregory" type="fix" due-to="Marcono1234">Fix CI only running on Ubuntu & improve OS-specific tests #143.</action>
<!-- UPDATE -->
<action dev="ggregory" type="update" due-to="Dependabot">Bump org.apache.commons:commons-parent from 65 to 69 #174.</action>
</release>
<release version="1.4.0" date="2024-01-01" description="Maintenance and feature Release (Java 8 or above)">
<!-- ADD -->
<action dev="ggregory" type="add" due-to="Gary Gregory">Add ShutdownHookProcessDestroyer.isEmpty().</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add DefaultExecuteResultHandler.waitFor(Duration).</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add Watchdog.Watchdog(Duration).</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add ExecuteWatchdog.ExecuteWatchdog(Duration).</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add PumpStreamHandler.setStopTimeout(Duration) and deprecate PumpStreamHandler.setStopTimeout(long).</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add DefaultExecutor.Builder.</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add DaemonExecutor.Builder.</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">Add ExecuteWatchdog.Builder.</action>
<action dev="ggregory" type="add" 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 dev="ggregory" type="fix" due-to="nullptr">Java-style Array declaration and remove empty finally block #26.</action>
<action dev="ggregory" type="fix" due-to="John Patrick">Use JUnit 5 assertThrows() #72.</action>
<action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">[StepSecurity] ci: Harden GitHub Actions #107.</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">Port from JUnit 4 to 5.</action>
<action dev="ggregory" type="fix" due-to="ArdenL-Liu, Gary Gregory">[Javadoc] CommandLine.toCleanExecutable(final String dirtyExecutable) IllegalArgumentException #61.</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">ExecuteException propagates its cause to its IOException superclass.</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">Propagate exception in DebugUtils.handleException(String, Exception).</action>
<action dev="ggregory" type="fix" 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 dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in MapUtils.prefix(Map, String).</action>
<!-- REMOVE -->
<action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate DefaultExecuteResultHandler.waitFor(long).</action>
<action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate ExecuteWatchdog.ExecuteWatchdog(long).</action>
<action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate Watchdog.Watchdog(long).</action>
<action dev="ggregory" type="remove" due-to="Gary Gregory">Drop obsolete and unmaintained Ant build.</action>
<action dev="ggregory" type="remove" due-to="Gary Gregory">Drop CLIRR plugin, replaced by JApiCmp.</action>
<!-- UPDATE -->
<action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">Bump github actions #52.</action>
<action issue="EXEC-111" dev="ggregory" type="update" due-to="Gary Gregory">Update from Java 5 to 6.</action>
<action dev="ggregory" type="update" due-to="Gary Gregory">Update from Java 7 to 8.</action>
<action dev="ggregory" type="update" due-to="Gary Gregory">Bump actions/cache from 2 to 3.0.11 #48, #51, #55, #69.</action>
<action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump actions/checkout from 2.3.2 to 3.1.0 #24, #46, #68.</action>
<action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump actions/setup-java from 1.4.0 to 3.8.0 #21, #50, #70, #78.</action>
<action dev="ggregory" type="update" due-to="Dependabot">Bump junit from 4.13 to 5.9.1 Vintage #23, #33.</action>
<action dev="ggregory" type="update" due-to="Dependabot">Bump maven-pmd-plugin from 2.7.1 to 3.19.0 #45, #62.</action>
<action dev="ggregory" type="update" due-to="Dependabot">Bump maven-checkstyle-plugin from 2.13 to 3.2.0 #29, #60.</action>
<action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump commons-parent from 52 to 65, #49, #65, #79, #88, #105, #137.</action>
<action dev="ggregory" type="update" 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" dev="ggregory" type="add" due-to="Richard Atkins, Michael Vorburger">
DefaultExecutor async execute prevents shutdown hooks running.
</action>
<action issue="EXEC-81" dev="ggregory" type="fix" date="2014-02-04" due-to="Stephen Compall">
Remove remaining raw types, unchecked conversions
</action>
<action issue="EXEC-80" dev="ggregory" type="fix" 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" dev="ggregory" type="fix" 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>