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 static void 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.
