Apache Commons logo Apache Commons CLI

Apache Commons CLI Release Notes

Release History

Version Date Description
1.9.0 2024-08-10 This release contains new features and bug fixes and requires Java 8 or above.
1.8.0 2024-05-18 This release contains new features and bug fixes and requires Java 8 or above.
1.7.0 2024-04-13 This release contains new features and bug fixes and requires Java 8 or above.
1.6.0 2023-10-23 This release contains new features and bug fixes and requires Java 8 or above.
1.5.0 2021-10-23 This release contains new features and bug fixes and requires Java 7 or above.
1.4 2017-03-09 This release contains new features and bug fixes and requires Java 5 or above.
1.3.1 2015-06-17 This release contains bug fixes and requires Java 5 or above.
1.3 2015-05-09 This release contains new features and bug fixes and requires Java 5 or above..
1.2 2009-03-19 This release contains new features and bug fixes and requires Java 5 or above.
1.1 2007-07-08 This is a maintenance release containing bug fixes.
1.0 2002-11-06 Initial release

Release 1.9.0 – 2024-08-10

Type Changes By
Add Add OptionGroup.isSelected(). Thanks to Gary Gregory. ggregory
Add You can now extend HelpFormatter.Builder. Thanks to Gary Gregory. ggregory
Add Add 'since' attribute to Option to track when an Option was introduced #292 Thanks to Claude Warren. ggregory
Fix Fix Javadoc pathing #280. Fixes CLI-334. Thanks to Eric Pugh. ggregory
Fix Updated properties documentation #285. Fixes CLI-335. Thanks to Claude Warren. ggregory
Fix Deprecation not always reported #284. Fixes CLI-336. Thanks to Claude Warren, Gary Gregory. ggregory
Fix Replace internal StringBuffer with StringBuilder. Thanks to Gary Gregory. ggregory
Update Bump org.apache.commons:commons-parent from 70 to 72 #283. Thanks to Gary Gregory, Dependabot. ggregory

Release 1.8.0 – 2024-05-18

Type Changes By
Add Add optional HelpFormatter Function to document Deprecated options #271. Fixes CLI-332. Thanks to Claude Warren, Gary Gregory. ggregory
Add Add PMD check to default Maven goal. Thanks to Gary Gregory. ggregory
Fix Handle reporting of deprecated options when parameters are not String type. #270. Fixes CLI-331. Thanks to Claude Warren, Gary Gregory. ggregory
Fix Avoid throwing NullPointerException when calling CommandLineParser will null array elements. Thanks to Claude Warren, Gary Gregory. ggregory
Fix Cleanup deprecation issues #272. Thanks to Claude Warren. ggregory
Fix Fix PMD UnnecessaryFullyQualifiedName issues. Thanks to Gary Gregory. ggregory
Update Bump commons-parent from 69 to 70. Thanks to Gary Gregory. ggregory

Release 1.7.0 – 2024-04-13

Type Changes By
Fix Inconsistent behavior in key/value pairs (Java property style). Fixes CLI-312. Thanks to Claude Warren, Gary Gregory. ggregory
Fix Avoid NullPointerException in Util.stripLeadingAndTrailingQuotes(String). Thanks to Gary Gregory. ggregory
Fix Awkward behavior of Option.builder() for multiple optional args. Fixes CLI-320. Thanks to Paul King, Claude Warren. ggregory
Fix Properties from multiple arguments with value separator. #237. Fixes CLI-325. Thanks to Claude Warren. ggregory
Fix Fix for expected textual date values. #244. Fixes CLI-327. Thanks to Claude Warren, Gary Gregory. ggregory
Fix Option.Builder.option("") should throw IllegalArgumentException instead of ArrayIndexOutOfBoundsException. Thanks to Gary Gregory. ggregory
Fix Avoid NullPointerException in CommandLine.getOptionValues(Option|String). Thanks to Gary Gregory. ggregory
Add Add and use a Converter interface and implementations without using BeanUtils #216. Fixes CLI-321. Thanks to Claude Warren, Gary Gregory. ggregory
Add Add Maven property project.build.outputTimestamp for build reproducibility. Thanks to Gary Gregory. ggregory
Add Add '-' as an option char and implemented extensive tests #217. Fixes CLI-322. Thanks to Claude Warren, Gary Gregory. ggregory
Add Make adding OptionGroups and Options to existing Options easier #230. Fixes CLI-324. Thanks to Claude Warren, Gary Gregory. ggregory
Add Added Supplier<T> defaults for getParsedOptionValue #229. Fixes CLI-323. Thanks to Claude Warren, Gary Gregory. ggregory
Add Make Option.getKey() public #239. Fixes CLI-326. Thanks to Claude Warren, Gary Gregory. ggregory
Add Add builder factory CommandLine#builder(). Thanks to Claude Warren, Gary Gregory. ggregory
Add Support "Deprecated" CLI Options #252. Fixes CLI-329. Thanks to Eric Pugh, Gary Gregory. ggregory
Update Bump commons-parent from 64 to 69 #256. Thanks to Gary Gregory. ggregory
Update Update the tests to JUnit 5 #238. Thanks to Elric, Gary Gregory. ggregory
Update Bump tests commons-io:commons-io from 2.16.0 to 2.16.1 #258. Thanks to Dependabot, Gary Gregory. ggregory

Release 1.6.0 – 2023-10-23

Type Changes By
Update Fix SpotBugs Error: Medium: Method intentionally throws RuntimeException. [org.apache.commons.cli.Option] At Option.java:[lines 417-423] THROWS_METHOD_THROWS_RUNTIMEEXCEPTION Thanks to Gary Gregory. ggregory
Update Fix SpotBugs Error: Medium: Method intentionally throws RuntimeException. [org.apache.commons.cli.Option] At Option.java:[lines 446-450] THROWS_METHOD_THROWS_RUNTIMEEXCEPTION Thanks to Gary Gregory. ggregory
Update Fix SpotBugs Error: Medium: Method intentionally throws RuntimeException. [org.apache.commons.cli.Option] At Option.java:[lines 474-478] THROWS_METHOD_THROWS_RUNTIMEEXCEPTION Thanks to Gary Gregory. ggregory
Update Use EMPTY_STRING_ARRAY constant. #102. Thanks to Ken Dombeck. ggregory
Update Fix site links that are broken #155. Thanks to Arturo Bernal. ggregory
Update Use Math.max() #111. Delete unused assignment #112. Thanks to Arturo Bernal. ggregory
Fix [StepSecurity] ci: Harden GitHub Actions #176. Thanks to step-security-bot, Gary Gregory. ggregory
Fix Inconsistent date format in changes report. Fixes CLI-318. Thanks to Alexander Veit, Gary Gregory. ggregory
Fix Fix NPE in CommandLine.resolveOption(String). Fixes CLI-283. Thanks to Dilraj Singh, Gary Gregory. ggregory
Fix CommandLine.addOption(Option) should not allow a null Option. Fixes CLI-283. Thanks to Dilraj Singh, Gary Gregory. ggregory
Fix CommandLine.addArgs(String) should not allow a null String. Fixes CLI-283. Thanks to Gary Gregory. ggregory
Fix Site docs: "Usage Scenarios" refers to deprecated methods. Fixes CLI-303. Thanks to Julian Schilling, Gary Gregory. ggregory
Fix NullPointerException thrown by CommandLineParser.parse(). Fixes CLI-317. Thanks to Philippe Bastiani, Sruteesh Kumar Paramata, Gary Gregory. ggregory
Fix StringIndexOutOfBoundsException thrown by CommandLineParser.parse(). Fixes CLI-313. Thanks to Dominik Stadler, HUNG LU, Sruteesh Kumar Paramata. ggregory
Update Add github/codeql-action. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump Java from 7 to 8. Thanks to Gary Gregory. ggregory
Update Bump actions/cache from 2.1.7 to 3.0.10 #97, #130, #132. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump actions/checkout from 3 to 3.1.0 #133. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump actions/setup-java from 2 to 3.6.0 #136. Thanks to Gary Gregory. ggregory
Update Bump spotbugs from 4.5.3 to 4.7.3 #96, #107, #113, #125, #138. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump spotbugs-maven-plugin from 4.5.3.0 to 4.7.3.0 #98, #108, #115, #117, #126, #145. Thanks to Dependabot. ggregory
Update Bump commons-parent from 52 to 64 #100, #128, #151, #158. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump maven-antrun-plugin from 3.0.0 to 3.1.0 #103. Thanks to Dependabot. ggregory
Update Bump maven-javadoc-plugin from 3.3.2 to 3.4.1 #105, #120. Thanks to Dependabot. ggregory
Update Bump maven-pmd-plugin from 3.16.0 to 3.19.0 #110, #124. Thanks to Dependabot. ggregory
Update Bump jacoco-maven-plugin from 0.8.7 to 0.8.8. Thanks to Gary Gregory. ggregory
Update Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #121. Thanks to Gary Gregory. ggregory
Update Bump japicmp-maven-plugin from 0.15.4 to 0.16.0. Thanks to Gary Gregory. ggregory
Update Update JUnit 4 to 5 vintage. Thanks to Gary Gregory. ggregory

Release 1.5.0 – 2021-10-23

Type Changes By
Fix Fix NPE in DefaultParser.isLongOption(String). Thanks to Gary Gregory. ggregory
Fix @param or @return lines should end with a period in CommandLine.java. Fixes CLI-279. Thanks to Krishna Mohan Rao Kandunoori. britter
Fix Replace deprecated FindBugs with SpotBugs. Thanks to Gary Gregory. ggregory
Fix Replace CLIRR with JApiCmp. Thanks to Gary Gregory. ggregory
Fix Option Javadocs grammar nits #55. Thanks to Elliotte Rusty Harold. ggregory
Fix Minor Improvements #57, #61. Thanks to Arturo Bernal, Gary Gregory. ggregory
Fix Input "test" gets parsed as test, quotes die #58. Fixes CLI-254. Thanks to stoty. ggregory
Fix Allow whitespace-only header and footer #26. Fixes CLI-287. Thanks to MrQubo, Gary Gregory. ggregory
Add Accommodate toggling partial matching in DefaultParser. Fixes CLI-217. Thanks to Rubin Simons. chtompki
Add Option parser type EXISTING_FILE_VALUE not check file existing. Fixes CLI-274. Thanks to Béla Schaum. britter
Add CommandLine.getXXX and CommandLine.hasXXX should accept an Option as a parameter. Fixes CLI-271. Thanks to Christoph Läubrich. britter
Add Adjust access-modifier of checkRequiredOptions() to protected. Fixes CLI-276. Thanks to Jason Dillon. ggregory
Add TypeHandler should throw ParseException for an unsupported class. Fixes CLI-282. Thanks to Alex Nordlund. ggregory
Add Added setter for Builder.option #33. Thanks to Waldemar Sojka, Gary Gregory. ggregory
Add Add Option unit tests #76. Thanks to Waldemar Sojka, Gary Gregory. ggregory
Update Update Java from version 5 to 7. Fixes CLI-294. ggregory
Update Docs: Replace OptionBuilder in usage page #30. Thanks to Mincong Huang. ggregory
Update Remove deprecated sudo setting. #36. Thanks to dengliming. ggregory
Update Bump junit:junit from 4.12 to 4.13.2, #53, #60. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump commons-parent from 48 to 52. Thanks to Dependabot. ggregory
Update Bump maven-pmd-plugin from 3.12.0 to 3.16.0, #44, #54, #67, #92. Thanks to Dependabot. ggregory
Update Bump actions/checkout from 2.3.1 to 3 #46, #72, #78, #93. Thanks to Dependabot. ggregory
Update Bump actions/setup-java from v1.4.2 to v2 #50. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump maven-antrun-plugin from 1.7 to 3.0.0 #43. Thanks to Dependabot. ggregory
Update Bump maven-checkstyle-plugin from 2.15 to 3.1.2 #41. Thanks to Gary Gregory. ggregory
Update Bump checkstyle to 9.3 #68, #86, #90. Thanks to Gary Gregory. ggregory
Update Bump actions/cache from 2 to 2.1.7 #64, #65, #81. Thanks to Dependabot. ggregory
Update Bump commons.animal-sniffer.version 1.19 -> 1.20. Thanks to Gary Gregory. ggregory
Update Bump maven-bundle-plugin 5.1.1 -> 5.1.2. Thanks to Gary Gregory. ggregory
Update Bump biz.aQute.bndlib.version 5.1.2 -> 6.0.0. Thanks to Gary Gregory. ggregory
Update Bump spotbugs from 4.4.1 to 4.5.3 #70, #88. Thanks to Dependabot. ggregory
Update Bump spotbugs-maven-plugin from 4.4.1 to 4.5.3.0 #71, #85, #87. Thanks to Dependabot. ggregory
Update Bump maven-javadoc-plugin from 3.3.1 to 3.3.2, #91. Thanks to Dependabot. ggregory

Release 1.4 – 2017-03-09

Type Changes By
Add Introduce CommandLine.Builder. Fixes CLI-269. rfscholte
Fix Optional argument picking up next regular option as its argument. Fixes CLI-265. Thanks to Martin Sandiford. britter
Add Add an addRequiredOption method to Options. Fixes CLI-267. Thanks to Ricardo Ribeiro. britter
Fix HelpFormatter.setOptionComparator(null) doesn't display the values in inserted order. Fixes CLI-266. Thanks to Ravi Teja. britter

Release 1.3.1 – 2015-06-17

Type Changes By
Fix LongOpt falsely detected as ambiguous. Fixes CLI-252. Thanks to Simon Harrer. britter

Release 1.3 – 2015-05-09

Type Changes By
Fix Fixed broken Javadoc links on Introduction page. Fixes CLI-248. djones
Fix Fixed code example in javadoc of "Option#Builder#valueSeparator(char)". Fixes CLI-234. Thanks to Greg Thomas. tn
Fix Clarified behavior of "OptionValidator#validateOption(String)" in case of null input. Fixes CLI-241. Thanks to Beluga Behr. tn
Update Small cleanup of Option class. Fixes CLI-240. Thanks to Beluga Behr. tn
Update Removed DoubleCheckedLocking test from checkstyle configuration. Fixes CLI-231. Thanks to Duncan Jones. tn
Update Options.getRequiredOptions() now returns an unmodifiable list. Fixes CLI-230. tn
Add Added new fluent API to create Option instances via builder class Option.Builder. This replaces the now deprecated OptionBuilder. Fixes CLI-224. Thanks to Duncan Jones, Brian Blount. tn
Update Clarify javadoc for CommandLine.getOptionValue() that the first specified argument will be returned. Fixes CLI-218. Thanks to Sven. tn
Add Added new method Options.addOption(String, String). Fixes CLI-214. Thanks to Alexandru Mocanu. tn
Update Changed unit tests to junit 4 annotation style. Fixes CLI-227. Thanks to Duncan Jones. tn
Fix Default options will now work correctly with required options that are missing. Fixes CLI-202. ebourg
Fix Default options will now work correctly together with option groups. Fixes CLI-203. ebourg
Update The javadoc of OptionBuilder now states that the class is not thread-safe. Fixes CLI-209. Thanks to Thomas Herre. ebourg
Add HelpFormatter now supports setting the displayed separator of long options. Fixes CLI-169. Thanks to J. Lewis Muir. ebourg
Update Improve description of parameter "stopAtNonOption" in method CommandLine.parse(Options, String[], boolean). Fixes CLI-197. Thanks to Anders Larsson. ebourg
Fix Passing default values for not defined options to a parser will now trigger a ParseException instead of a NullPointerException. Fixes CLI-204. ebourg
Fix HelpFormatter.setArgName(String) now correctly sets the argument name. Fixes CLI-205. ebourg
Fix Default properties provided as input to the Parser.parse() methods are now correctly processed. Fixes CLI-201. ebourg
Fix CommandLine.getParsedOptionValue() now returns a String object if no option type has been explicitly set. Fixes CLI-215. Thanks to Manuel Müller. ebourg
Update Fixed typo in javadoc of class CommandLine. Fixes CLI-200. Thanks to Gerard Weatherby. ggregory
Update Source code now uses generic types instead of raw types where possible. Fixes CLI-223. Thanks to Gerard Weatherby. ebourg
Update Corrected javadoc for return type of MissingOptionException.getMissingOptions(). Fixes CLI-220. Thanks to Joe Casadonte. ebourg
Fix HelpFormatter now prints command-line options in the same order as they have been added. Fixes CLI-212. Thanks to Per Cederberg. ebourg
Fix Standard help text now shows mandatory arguments also for the first option. Fixes CLI-186. Thanks to Kristoff Kiefer. ebourg
Fix HelpFormatter does not strip anymore leading whitespace in the footer text. Fixes CLI-207. Thanks to Uri Moszkowicz. ebourg
Fix Strip quotes contained in argument values only if there is exactly one at the beginning and one at the end. Fixes CLI-185. Thanks to Einar M R Rosenvinge. ebourg
Fix Negative numerical arguments take precedence over numerical options (only supported by the new DefaultParser). Fixes CLI-184. ebourg
Fix Fix possible StringIndexOutOfBoundsException in HelpFormatter. Fixes CLI-193. Thanks to Travis McLeskey. ebourg
Add A new parser is available: DefaultParser. It combines the features of the GnuParser and the PosixParser. It also provides additional features like partial matching for the long options, and long options without separator (i.e like the JVM memory settings: -Xmx512m). This new parser deprecates the previous ones. Fixes CLI-161,CLI-167,CLI-181. ebourg
Fix OptionGroups no longer throw an AlreadySelectedException when reused for several parsings. Fixes CLI-183. ebourg
Fix OptionGroup now selects properly an option with no short name. Fixes CLI-182. ebourg
Add PosixParser now supports partial long options (--ver instead of --version). Fixes CLI-160. ebourg

Release 1.2 – 2009-03-19

Type Changes By
Fix OptionBuilder is now reseted if an IllegalArgumentException occurs in create(). Fixes CLI-177. joehni
Remove Ant build system removed. bayard
Fix Incomplete usage documentation about Java property option. Fixes CLI-154. ebourg
Fix TypeHandler prints messages to stderr. Fixes CLI-170. bayard
Fix Infinite loop in the wrapping code of HelpFormatter. Fixes CLI-162. bayard
Fix Fixing some minor javadoc issues. sgoeschl
Fix The number of arguments defined for an option specifies the arguments per occurrence of the option and not for all occurrences. This was a major regression in CLI 1.1 which prevented the use of repeated options. Fixes CLI-137. ebourg
Add Added a getOptionProperties() method in the CommandLine class to retrieve easily the key/value pairs specified with options like -Dkey1=value1 -Dkey2=value2. ebourg
Update GnuParser now supports long options with an '=' sign (ie. --foo=bar and -foo=bar). Fixes CLI-157. ebourg
Fix PosixParser no longer ignores unrecognized short options. Fixes CLI-164. ebourg
Fix PosixParser no longer stops the bursting process of a token if stopAtNonOption is enabled and a non option character is encountered. Fixes CLI-163. ebourg
Fix PosixParser no longer keeps processing the tokens after an unrecognized long option when stopAtNonOption is enabled. Fixes CLI-165. ebourg
Fix Required options are properly checked if an Options instance is used twice to parse a command line. Fixes CLI-156. ebourg
Update The ordering of options can be defined in help messages. Fixes CLI-155. bayard
Fix The line wrapping in HelpFormatter now works properly. This caused CLI-162, and thus there was a feature change for the HelpFormatter in that it is strict on width now rather than what seemed to be lenience before. Text without whitespace will be cut off to fit in the spacing, and an IllegalStateException will be thrown if it is impossible to output the information due to spacing constraints. Fixes CLI-151. Thanks to Dan Armbrust. bayard
Fix The message of MissingOptionException has been improved. Fixes CLI-149. bayard
Update The exceptions have been enhanced with methods to retrieve easily the related options. Fixes CLI-86. ebourg
Fix Option.toString() now reports arguments properly. Fixes CLI-141. Thanks to Henning Schmiedehausen, Bjorn Townsend. bayard
Update The Parser class has been changed to be more easily extendable. Fixes CLI-142. Thanks to Henning Schmiedehausen. bayard
Update The following classes are now serializable: Option, OptionGroup, CommandLine and Options. Fixes CLI-140. bayard
Remove OptionValidator is no longer public, its methods were all private. ebourg

Release 1.1 – 2007-07-08

Type Changes By
Fix Wrong usage summary. Fixes CLI-2.
Fix Dependecy on commons-lang-2.0 but commons-lang-1.0 is obtained. Fixes CLI-5.
Fix Line separator as first char for helpformatter (footer) throws exception. Fixes CLI-8.
Fix CommandLine.getOptionValue() behaves contrary to docs. Fixes CLI-13.
Fix clone method in Option should use super.clone(). Fixes CLI-21.
Fix Passing properties in Parser does not work for options with a single argument. Fixes CLI-23.
Fix Only long options without short option seems to be noticed. Fixes CLI-26.
Fix Infinite Loop in Command-Line processing. Fixes CLI-28.
Fix Options should not be able to be added more than once. Fixes CLI-29.
Fix HelpFormatter doesn't sort options properly. Fixes CLI-35.
Fix HelpFormatter doesn't function correctly for options with only LongOpt. Fixes CLI-38.
Fix Document enhancement. Fixes CLI-44.
Fix Documentation errors. Fixes CLI-45.
Fix Parameter value "-something" misinterpreted as a parameter. Fixes CLI-51.
Fix clone() method doesn't fully clone contents. Fixes CLI-56.
Fix No Javadoc for HelpFormatter!. Fixes CLI-59.
Fix Parser breaks up command line parms into single characters. Fixes CLI-65.
Fix Missing arguments in HelpFormatter.renderOptions(..). Fixes CLI-67.
Fix Error parsing option arguments. Fixes CLI-69.
Fix A weakness of parser. Fixes CLI-71.
Add Setting description of a Option. Fixes CLI-78.
Fix CLI_1_BRANCH build.xml doesn't work. Fixes CLI-129.
Fix Remove the Commons Lang dependency. Fixes CLI-130.
Fix Options class returns options in random order. Fixes CLI-131.
Fix MissingOptionException should contain a useful error message. Fixes CLI-132.
Fix NullPointerException in Util.stripLeadingHyphens when passed a null argument. Fixes CLI-133.
Fix 1.1 is not backwards compatible because it adds methods to the CommandLineParser interface. Fixes CLI-134.
Fix Backwards compatibility between 1.1 and 1.0 broken due to Option.addValue removal. Fixes CLI-135.

Release 1.0 – 2002-11-06

No changes in this release.