Pass an Options
object to a
HelpFormatter
and print a usage message. Example 7-1 creates the
same Options
object from Recipe 7.3. If the help option is specified, or if there
is a problem parsing the program arguments, the printUsage()
method is called to print usage information
to System.out
.
Example 7-1. Printing usage information with HelpFormatter
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
public class SomeApp {
private static final String USAGE = "[-h] [-v] [-f <file> | -m <email>]";
private static final String HEADER =
"SomeApp - A fancy and expensive program, Copyright 2010 Blah.";
private static final String FOOTER =
"For more instructions, see our website at: http://www.blah123.org";
public
static
void
main(String[] args)throws
Exception { // Create a Parser CommandLineParser parser =new
BasicParser( ); Options options =new
Options( ); options.addOption("h", "help",false
, "Print this usage information"); options.addOption("v", "verbose",false
, "Print out VERBOSE information" ); OptionGroup optionGroup = new OptionGroup( ); optionGroup.addOption( OptionBuilder.hasArg(true).withArgName("file") .withLongOpt("file").create('f') ); optionGroup.addOption( OptionBuilder.hasArg(true).withArgName("email") .withLongOpt("email").create('m') ); options.addOptionGroup( optionGroup ); // Parse the program arguments try { CommandLine commandLine = parser.parse( options, args );if
( commandLine.hasOption('h') ) { printUsage( options ); System.exit(0); } // ... do important stuff ... } catch( Exception e ) { System.out.println( "You provided bad program arguments!" ); printUsage( options ); System.exit(1); } }private
staticvoid
printUsage(Options options) { HelpFormatter helpFormatter =new
HelpFormatter( ); helpFormatter.setWidth( 80 ); helpFormatter.printHelp( USAGE, HEADER, options, FOOTER ); } }
When this application is executed and the parser encounters an unexpected program argument, the following output is produced:
You provided bad program arguments! usage: [-h] [-v] [-f <file> | -m <email>] SomeApp - A fancy and expensive program, Copyright 2010 Blah. -f,--file <file> -h,--help Print this usage information -m,--email <email> -v,--verbose Print out VERBOSE information For more instructions, see our website at: http://www.blah123.org
If an exception is thrown during parser.parse( )
,
the application will print an error message and call
printUsage( )
, which creates a
HelpFormatter
object and sets the display width to
80 characters. helpFormatter.printHelp( )
prints
to standard out and takes five parameters, including the
Options
object, which contains configuration for
the CommandLineParser
. The first parameter
specified a usage string, which is an abbreviated specification of
the program arguments: -h
,
-v
, and -f
<file>
|
-m <email>
. The second argument is a header to print
before the list of available options. The third parameter is the same
Options
object passed to the
CommandLineParser
.
HelpFormatter
will use this
Options
object to print out the short name, long
name, and description of each option. The fourth parameter is a
footer to display after the list of options.
3.144.242.235