【问题标题】:How to set description for command, but not for option如何为命令设置描述,而不是为选项设置描述
【发布时间】:2017-05-12 14:42:31
【问题描述】:

对于每个命令,我都有一个实现特定接口的具体类。 例如:

public class FooCommand implements Command{

    @Parameter(names = {"-?","--help"}, description = "display this help",help = true)
    private boolean helpRequested = false;
    ...
}

这是我得到的使用信息:

Usage: foo-command [options]
  Options:
    -?, --help
      display this help

如何将描述添加到命令(而不是选项)。例如我想得到这样的使用信息:

Usage: foo-command [options] - This command is used as base foo
  Options:
    -?, --help
      display this help

编辑我有 foo-command、boo-command、lala-command。但是,所有这些命令都是独立的,并且不在一个主命令中(换句话说,这不像 git clone ...)。 这就是我使用的方式

 JCommander jCommander=new JCommander(command, args);
 jCommander.setProgramName(commandName);//for example foo-command
 StringBuilder builder=new StringBuilder();
 jCommander.usage(builder);

【问题讨论】:

    标签: java jcommander


    【解决方案1】:

    跟随 sn-p 可能是您正在寻找的起点。

    @Parameters(commandDescription = "foo-command short description")
    public class FooCommand implements Command {
    
        @Parameter(names = {"-?", "--help"}, description = "display this help", 
            help = true)
        private boolean helpRequested = false;
    
        @Parameter(description = "This command is used as base foo")
        public List<String> commandOptions;
    
        // your command code goes below
    }
    


    public class CommandMain {
    
        public static void main(String[] args) {
            JCommander jc = new JCommander();
            jc.setProgramName(CommandMain.class.getSimpleName());
            FooCommand foo = new FooCommand();
            jc.addCommand("foo-command", foo);
            // display the help
            jc.usage();
        }
    }
    

    输出

    Usage: CommandMain [options] [command] [command options]
      Commands:
        foo-command      foo-command short description
          Usage: foo-command [options] This command is used as base foo
            Options:
              -?, --help
                 display this help
                 Default: false
    

    也可以看看:JCommander command syntax

    edit 显示命令本身的描述。在这种情况下,可以省略类 FooCommand 上的注解 @Parameters(commandDescription = "foo-command short description")

    Command command = new FooCommand();
    JCommander jc = new JCommander(command, args);
    jc.setProgramName("foo-command");
    StringBuilder builder = new StringBuilder();
    jc.usage(builder);
    System.out.println(builder);
    

    输出

    Usage: foo-command [options] This command is used as base foo
      Options:
        -?, --help
           display this help
           Default: false
    

    【讨论】:

    • 感谢您的回答。但我不需要 CommandMain。我有不同的命令没有“主要”
    • @Pavel 命令主要用于提供MCVE。也许您应该在这种情况下将一个更好的代码示例放入您的问题中。
    • @Pavel 我添加了修改后的代码 sn-p。课程和以前一样。
    • 非常感谢。看来@Parameters(commandDescription = "") 可以省略。因此,为了得到我想要的,必须使用@Parameter(description = "This command is used as base foo") - 没有names 的参数用于任何类型的类的任何字段。怎么解释?
    • @Pavel 我更新了我的答案以显示该类的 commandDescription 在帮助中的显示位置。
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2018-11-20
    • 2018-11-06
    相关资源
    最近更新 更多