使用Apache common-cli解析参数

Maj*_*imi 1 java command-line-interface apache-commons apache-commons-cli

Apache common-cli在其网站上有一个ls命令示例:

options.addOption( "a", "all", false, "do not hide entries starting with ." );
options.addOption( "A", "almost-all", false, "do not list implied . and .." );
options.addOption( "b", "escape", false, "print octal escapes for nongraphic " + "characters" );
options.addOption( OptionBuilder.withLongOpt( "block-size" )
                                .withDescription( "use SIZE-byte blocks" )
                                .hasArg()
                                .withArgName("SIZE")
                                .create() );
Run Code Online (Sandbox Code Playgroud)

这显示了这样的帮助:

-a, --all                  do not hide entries starting with .
-A, --almost-all           do not list implied . and ..
-b, --escape               print octal escapes for nongraphic characters
    --block-size=SIZE      use SIZE-byte blocks
Run Code Online (Sandbox Code Playgroud)
  1. 当我编写此代码时,它显示--block-size <SIZE>。我想显示以下内容:(-z,--block-size=SIZE不仅仅是长选项)。
  2. 是什么的差异PosixParserGnuParser?我在代码中更改了它们,但没有发现任何区别。
  3. 当我如提供错误的选项h它没有throw任何ParseException。程序正常启动和完成。

Emm*_*urg 5

  1. 示例中的块大小选项只有长格式,这就是为什么没有显示短选项的原因。如果添加简短的别名,您将获得预期的结果

  2. PosixParserGnuParser已被弃用在下议院CLI的最新版本。可以使用的新的统一解析器DefaultParser。posix解析器可以解析串联的短选项,例如tar -zxvf foo.tar.gz

  3. 根据stopAtNonOption解析器参数的值,额外选项要么作为应用程序的参数处理,要么触发异常。