            Apache Commons CLI
                Version 1.4
               Release Notes


INTRODUCTION:

This document contains the release notes for this version of the Commons CLI
package. Commons CLI provides a simple API for working with the command line
arguments and options.

Commons CLI 1.4 is a feature release and binary compatible with the
previous versions, except for the OptionValidator class that is no longer public
(change introduced in v1.2). Commons CLI 1.4 at least requires Java 5.0.

More information can be found on the project site at
http://commons.apache.org/cli.


NEW FEATURES
============

o CLI-269: Introduce CommandLine.Builder
o CLI-267: Add an addRequiredOption method to Options.
           Thanks to Ricardo Ribeiro.


BUG FIXES
=========

o CLI-265: Optional argument picking up next regular option as its argument.
           Thanks to Martin Sandiford.
o CLI-266: HelpFormatter.setOptionComparator(null) doesn't display the values
           in inserted order. Thanks to Ravi Teja.


                Release Notes for version 1.3.1

BUG FIXES
=========

o CLI-252: LongOpt falsely detected as ambiguous. Thanks to Simon Harrer.


                Release Notes for version 1.3

NOTES
=====

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.

DEPRECATIONS
============

o org.apache.commons.cli.BasicParser
    replaced by org.apache.commons.cli.DefaultParser

o org.apache.commons.cli.GnuParser
    replaced by org.apache.commons.cli.DefaultParser

o org.apache.commons.cli.OptionBuilder
    replaced by org.apache.commons.cli.Option.builder()
                org.apache.commons.cli.Option.builder(String)
                org.apache.commons.cli.Option.Builder

o org.apache.commons.cli.Parser
    replaced by org.apache.commons.cli.DefaultParser

o org.apache.commons.cli.PosixParser
    replaced by org.apache.commons.cli.DefaultParser


NEW FEATURES
============

o CLI-161: PosixParser doesn't stop the parsing on "--" tokens following an
           option with an argument
o CLI-167: Support options like Java memory settings (-Xmx512M)
o CLI-181: Unified Parser
o CLI-224: Added new fluent API to create Option instances via builder class
           Option.Builder. This replaces the now deprecated OptionBuilder.
           Thanks to Duncan Jones, Brian Blount.
o CLI-160: PosixParser now supports partial long options (--ver instead of
           --version).
o CLI-169: HelpFormatter now supports setting the displayed separator of long
           options. Thanks to J. Lewis Muir.
o CLI-214: Added new method Options.addOption(String, String). Thanks to
           Alexandru Mocanu.


BUG FIXES
=========

o CLI-248: Dead links on doc page.
o CLI-234: Fixed code example in javadoc of
           "Option#Builder#valueSeparator(char)". Thanks to Greg Thomas.
o CLI-241: Clarified behavior of "OptionValidator#validateOption(String)"
           in case of null input. Thanks to Beluga Behr.
o CLI-202: Default options will now work correctly with required options that
           are missing.
o CLI-203: Default options will now work correctly together with option groups.
o CLI-205: HelpFormatter.setArgName(String) now correctly sets the argument
           name.
o CLI-204: Passing default values for not defined options to a parser will now
           trigger a ParseException instead of a NullPointerException.
o CLI-201: Default properties provided as input to the Parser.parse() methods
           are now correctly processed.
o CLI-215: CommandLine.getParsedOptionValue() now returns a String object if no
           option type has been explicitly set. Thanks to Manuel Müller.
o CLI-212: HelpFormatter now prints command-line options in the same order as
           they have been added. Thanks to Per Cederberg.
o CLI-186: Standard help text now shows mandatory arguments also for the first
           option. Thanks to Kristoff Kiefer.
o CLI-207: HelpFormatter does not strip anymore leading whitespace in the
           footer text. Thanks to Uri Moszkowicz.
o CLI-185: Strip quotes contained in argument values only if there is exactly
           one at the beginning and one at the end. Thanks to
           Einar M. R. Rosenvinge.
o CLI-184: Negative numerical arguments take precedence over numerical options.
o CLI-193: Fix possible StringIndexOutOfBoundsException in HelpFormatter.
           Thanks to Travis McLeskey.
o CLI-183: OptionGroups no longer throw an AlreadySelectedException when reused
           for several parsings.
o CLI-182: OptionGroup now selects properly an option with no short name.


CHANGES
=======

o CLI-240: Small cleanup of Option class. Thanks to Beluga Behr.
o CLI-230: Options.getRequiredOptions() now returns an unmodifiable list.
o CLI-218: Clarify javadoc for CommandLine.getOptionValue() that the first
           specified argument will be returned. Thanks to Sven.
o CLI-227: Changed unit tests to junit 4 annotation style. Thanks to
           Duncan Jones.
o CLI-209: The javadoc of OptionBuilder now states that the class is not
           thread-safe. Thanks to Thomas Herre.
o CLI-200: Fixed typo in javadoc of class CommandLine. Thanks to
           Gerard Weatherby.
o CLI-223: Source code now uses generic types instead of raw types where
           possible. Thanks to Gerard Weatherby.
o CLI-220  Corrected javadoc for return type of
           MissingOptionException.getMissingOptions(). Thanks to Joe Casadonte.
o CLI-197: Improve description of parameter "stopAtNonOption" in method
           CommandLine.parse(Options, String[], boolean). Thanks to
           Anders Larsson.
o CLI-231: Removed DoubleCheckedLocking test from checkstyle configuration.
           Thanks to Duncan Jones.


                Release Notes for version 1.2

NEW FEATURES
============

o --     : The method getOptionProperties() in the CommandLine class was added
           to retrieve easily the key/value pairs specified with options like
           -Dkey1=value1 -Dkey2=value2.
o CLI-157: GnuParser now supports long options with an '=' sign
           (ie. --foo=bar and -foo=bar)
o CLI-155: The ordering of options can be defined in help messages.


BUG FIXES
=========

o CLI-137: The number of arguments defined for an option specifies the
           arguments per occurence of the option and not for all occurences.
o CLI-164: PosixParser no longer ignores unrecognized short options.
o CLI-163: PosixParser no longer stops the bursting process of a token if
           stopAtNonOption is enabled and a non option character is
           encountered.
o CLI-165: PosixParser no longer keeps processing the tokens after an
           unrecognized long option when stopAtNonOption is enabled.
o CLI-156: Required options are properly checked if an Options instance is used
           twice to parse a command line.
o CLI-151: The line wrapping in HelpFormatter now works properly.


CHANGES
=======

o CLI-149: The message of MissingOptionException has been improved.
o CLI-86:  The exceptions have been enhanced with methods to retrieve easily
           the related options.
o CLI-141: Option.toString() now reports arguments properly.
o CLI-142: The Parser class has been changed to be more easily extendable.
o CLI-140: The following classes are now serializable: Option, OptionGroup,
           CommandLine and Options.
o --     : OptionValidator is no longer public, its methods were all private.


                Release Notes for version 1.1

NEW FEATURES
============

o CLI-78:  Setting description of a Option.

CHANGES
=======

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


Historical list of changes: http://commons.apache.org/cli/changes-report.html

For complete information on Commons CLI, including instructions on how to
submit bug reports, patches, or suggestions for improvement, see the
Apache Commons CLI website:

http://commons.apache.org/cli/

Have fun!
-Apache Commons CLI team
