假定我们的程序需要以下选项:
引用
Options:
-t,--text use given information(String)
-b display current time(boolean)
-s,--size use given size(Integer)
-f,--file use given file(File)
-D use value for given property(property=value)
-t,--text use given information(String)
-b display current time(boolean)
-s,--size use given size(Integer)
-f,--file use given file(File)
-D
(1) Apache的Commons-CLI
版本:commons-cli-1.2.jar
支持三种CLI选项解析:
- BasicParser:直接返回参数数组值
- PosixParser:解析参数及值(-s10)
- GnuParser:解析参数及值(--size=10)
-Dkey=value
需要代码设置参数,返回类型需要转换。
args = new String[]{"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s10", "-Dkey1=value1", "-Dkey2=value2" }; try { // create Options object Options options = new Options(); options.addOption(new Option("t", "text", true, "use given information(String)")); options.addOption(new Option("b", false, "display current time(boolean)")); options.addOption(new Option("s", "size", true, "use given size(Integer)")); options.addOption(new Option("f", "file", true, "use given file(File)")); @SuppressWarnings("static-access") Option property = OptionBuilder.withArgName("property=value") .hasArgs(2) .withValueSeparator() .withDescription("use value for given property(property=value)") .create("D"); property.setRequired(true); options.addOption(property); // print usage HelpFormatter formatter = new HelpFormatter(); formatter.printHelp( "AntOptsCommonsCLI", options ); System.out.println(); // create the command line parser CommandLineParser parser = new PosixParser(); CommandLine cmd = parser.parse(options, args); // check the options have been set correctly System.out.println(cmd.getOptionValue("t")); System.out.println(cmd.getOptionValue("f")); if (cmd.hasOption("b")) { System.out.println(new Date()); } System.out.println(cmd.getOptionValue( "s" )); System.out.println(cmd.getOptionProperties("D").getProperty("key1") ); System.out.println(cmd.getOptionProperties("D").getProperty("key2") ); } catch (Exception ex) { System.out.println( "Unexpected exception:" + ex.getMessage() ); }
(2) Args4J
版本:args4j-2.0.29.jar
基于注解。
args = new String[] {"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s", "10", "-D", "key1=value1" , "-D", "key2=value2"}; try { Args4jOptions options = new Args4jOptions(); CmdLineParser parser = new CmdLineParser(options); // print usage parser.printUsage(System.out); System.out.println(); parser.parseArgument(args); // check the options have been set correctly System.out.println(options.getText()); System.out.println(options.getFile().getName()); if(options.isBol()) { System.out.println(new Date()); } System.out.println(options.getSize()); System.out.println(options.getProperties().get("key1")); System.out.println(options.getProperties().get("key2")); } catch (Exception ex) { System.out.println("Unexpected exception:" + ex.getMessage()); }
@Option(name = "-t", aliases = "-text", usage = "use given information(String)") private String text; @Option(name = "-b", usage = "display current time(boolean)") private boolean bol = false; @Option(name = "-s", aliases = "-size", usage = "use given size(Integer)") private int size = 0; @Option(name = "-f", aliases = { "-file" }, metaVar = "", usage = "use given file(File)") private File file; private Map properties = new HashMap (); @Option(name = "-D", metaVar = " = ", usage = "use value for given property(property=value)") public void setProperty(final String property) { String[] arr = property.split("="); properties.put(arr[0], arr[1]); }
(3) JCommander
版本:jcommander-1.45.jar
基于注解、TestNG作者开发。
args = new String[] {"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s", "10", "-D", "key1=value1" , "-D", "key2=value2"}; try { JCmdrOptions options = new JCmdrOptions(); JCommander jcmdr = new JCommander(options, args); // print usage jcmdr.setProgramName("AntOptsCommonsCLI"); jcmdr.usage(); // check the options have been set correctly System.out.println(options.getText()); System.out.println(options.getFile().getName()); if(options.isBol()) { System.out.println(new Date()); } System.out.println(options.getSize()); System.out.println(options.getDynamicParams().get("key1")); System.out.println(options.getDynamicParams().get("key2")); } catch (Exception ex) { System.out.println("Unexpected exception:" + ex.getMessage()); }
@Parameter(names = { "-t", "-text" }, description = "use given information(String)") private String text; @Parameter(names = { "-b" }, description = "display current time(boolean)") private boolean bol = false; @Parameter(names = { "-s", "-size" }, description = "use given size(Integer)") private int size = 0; @Parameter(names = { "-f", "-file" }, description = "use given file(File)") private File file; @DynamicParameter(names = "-D", description = "use value for given property(property=value)") public MapdynamicParams = new HashMap ();