upcoming changes (TODO): validation: For numeric types, use a Java condition without using beanshell Version 1.1.5: ->fixed a bug with zero length parameters to options ->fixed typos in comments and the readme, and updated the ExampleCLA ->fixed a bug with auto generated headers missing a newline ->added support for the "--" option, which signals that all following parameters are not options. Something like "ls -- -l" would give you a directory listing of a file named "-l". ->made the "-h" for help optional, by calling setAllowShortHelpOption(boolean allow). default is false. Version 1.1.4: ->word wrapped the custom documentation. Using the system property, "line.separator" is now very important. ->modified TestCommandLineApp so that it tells you the number of tests that failed and passed at the end, instead of you having to read through the entire output. ->added a setWarningsEnabled to CommandLineHandler to control whether warnings (currently only precision loss converting to float/double) are output to standard error ->some minor changes to readme.txt ->finished coding & testing the case insensitivity feature for options ->added the ability to specify a regular expression to automatically validate String parameters to options, as an alternative to using the validate() method in CommandLineApplication. ->fixed names of some fields and classes to be consistent with word meanings. Replaced "parameter" with "option" mostly. (clarified usage of: parameter, argument, option) ->finished the code (including exception handling, and allowing private constructors) that accepts any datatype Object for Fields as long as they take a String in a 1 parameter constructor. ->can specify multiple filenames in an implied option "loadArguments" that will add additional arguments from files, and added the ability to disable that option. The list separator ";" can be escaped "\;". Version 1.1.3: ->fixed 2 big typos in the readme.txt (wrote extends intead of implements) (thx Sam for noticing) ->reordered a bunch of the source code in CommandLineHandler.java; grouped up getters/setters, static fields, etc. and set some public and private methods to protected. ->reorganized the exception handling, so Throwable doesn't need to be caught. Catch RuntimeException instead. (thx Sam for helping design this behavior) ->changed getCustomDocumentationHeader() so returning null will generate documentation (including the title, version, author), and returning a String will make that the documentation. Before, this method had nothing to do with the title. (thx Sam for the idea) ->added setters for configuring the auto generated header (Sam requested this) Version 1.1.2: ->removed a constructor from the Exceptions (ParameterDefinitionException, ParameterUsageException, ParameterException), and inserted some missing text in the messages in other constructors. ->added the ExampleCLA example, and a readme.txt with instructions and portions of code from ExampleCLA ->renamed the "synopsis" methods, and allowed a variable number of parameters (using the ... syntax) ->fixed a bug where a non-String Field that was the last given argument would end up being ignored ->made the CommandLineHandler detect if an Option requires a parameter automatically so you don't have to put it in the Annotation ->added a static method in CommandLineHandler that can simplify creating a very basic main(...) for a CommandLineApplication ->added a validate() method that gets called before all the parameter info is erased Version 1.1.1: ->added another . in the version number and changed the datatype to a String in the class. ->added a getter and setter for the indent characters used in generating help. Now you can use the getIndent() to indent your own stuff consitently. ->fixed a bug where unnamed parameters would be blank. the name now defaults to "parameter". ->added a helpWasCalled() method to the CommandLineApplication interface that is called after help is printed (which should never be needed if you are using doneHandling() properly, but it's there just in case). Version 1.1: ->added more comment in CommandLineHandler.java to tell a bit more about how to specify a CommandLineOption in an application. ->removed some lines refering to DebugTool.breakPoint() (that were accidently left over) which isn't included in this library. ->added a main() in TestCommandLineApp (instead of only in TestCommandLineApp4) Version 1.0: ->fixed a bug when CommandLineOption fields sometimes can't be set if they are private (and maybe protected too) ->allowed fields and methods that handle options to be types other than String. This works for all types that have a constructor that takes a String, and works for all java primitives. It doesn't work for negative numbers yet, because with the '-', they are treated as options. ->added a LICENSE file Version 0.9: ->started the changes.txt ->in the source code, made all classes use CommandLineHandler.version for the version number ->fixed a bug in word wrapping that caused some lines to be missing ->modified the javadoc comment for CommandLineOption, and hasParameter() in CommandLineOption ->in CommandLineHandler.toString(CommandLineOption p, boolean description, boolean shortOption, boolean addNewLine), made line width smaller by one (80-1 or System.getenv("COLUMNS")-1) to make it work right on windows. ->fixed CommandLineHandler.toString(CommandLineOption p, boolean description, boolean shortOption, boolean addNewLine) so that it used the environment variable COLUMNS instead of the property.. oops. Current known problems: None Current known limitations (not sure if they should be considered problems): ->only one inner application can be used (by the same application) at a time (because any parameters following the one that called the inner app are passed to the inner one only) --app1 --app2 --app3 -a -b -c etc. is possible only if app3 is inside app2, and app2 is inside of app1. ->parameters to options can't start with '-', but non-options can start with '-' if the "--" parameter is used. ->boolean parameters must be used with "true" or "false" as a parameter instead of just assuming that usage is true. A method has to be used if you want to use a boolean without having to write "true" or "false" at the command line.