具有类似选项的子命令的Java命令行解析器

Azr*_*ger 2 java command-line-arguments picocli

我们开发了一个Java Cli应用程序,它具有带有类似选项的子命令.这就像svn:

svn commit -m messsage --username ARG --password ARG
svn checkout -r HEAD --username ARG --password ARG
Run Code Online (Sandbox Code Playgroud)

我的意思是每个子命令都有特殊的参数,我们也有全局参数,并且我们有一些参数对于某些子命令是相关的,但并不适用于所有子命令.

哪个命令行参数解析器支持该要求?

谢谢.

Rem*_*pma 5

picocli支持任意深度的嵌套子命令.

main命令定义全局选项,每个后续级别的嵌套命令都可以添加仅适用于该级别的选项.

CommandLine commandLine = new CommandLine(new MainCommand())
        .addSubcommand("cmd1", new ChildCommand1()) // 1st level
        .addSubcommand("cmd2", new ChildCommand2())
        .addSubcommand("cmd3", new CommandLine(new ChildCommand3()) // 2nd level
                .addSubcommand("cmd3sub1", new GrandChild3Command1())
                .addSubcommand("cmd3sub2", new GrandChild3Command2())
                .addSubcommand("cmd3sub3", new CommandLine(new GrandChild3Command3()) // 3rd
                        .addSubcommand("cmd3sub3sub1", new GreatGrandChild3Command3_1())
                        .addSubcommand("cmd3sub3sub2", new GreatGrandChild3Command3_2())
                                // etc
                )
        );
Run Code Online (Sandbox Code Playgroud)

您可能也喜欢它使用ANSI样式和颜色的帮助.

除了选项和位置参数之外,用法帮助还列出了已注册的子命令.

在此输入图像描述

使用帮助可以使用注释轻松自定义.

在此输入图像描述

  • 注释为主
  • git-style子命令
  • 嵌套的子子命令
  • 强类型选项参数
  • 强类型的位置参数
  • 可自定义的类型转换
  • 多值选项
  • 一个字段消耗多少个参数的直观模型
  • 流畅的API
  • POSIX风格的群集短选项
  • GNU风格的长选项
  • 允许任何选项前缀
  • 使用ANSI颜色有帮助
  • 可定制的使用帮助
  • 单个源文件:包含作为源以使您的应用程序保持单个jar