【问题标题】:PicoCLI : How to use @ArgGroup for a CommandLine.Command methodPicoCLI:如何将 @ArgGroup 用于 CommandLine.Command 方法
【发布时间】:2021-12-13 05:32:52
【问题描述】:

我在一个命令下有两个选项(-n 和 -t),如果使用了 -n,则需要 -t,但两者都不是必需的。但是,我不断收到关于 我正在尝试将选项作为参数发送到另一个方法(具有业务逻辑)作为参数。

有效用法:

agent.bat install -n -t <blahblah>
agent.bat install -t <blahblah> -n
agent.bat install -t <blah blah>
agent.bat install -t <----This is on interactive so it would ask for a parameter later

无效用法:

agent.bat install -n
agent.bat install -n -t

有效使用的当前输出:

agent.bat install -t
Missing required parameter: '<arg0>'
Usage: agent install [-hV] <arg0>
Setup or update the agent service program by install token.
      <arg0>
public class Agent implements Callable<Integer> {
    static class InstallArgs {
        @Option(names = {"-t", "--token"},
                order = 0,
                arity = "0..1",
                interactive = true,
                description = "The agent install token.",
                required = true) String installToken ;
        @Option(names = {"-n", "--noninteractive"},
                order = 1,
                description = "Sets installation to non-interactive",
                required = false) boolean nonInteractive ;
        public String toString() {
            return String.format("%s,%s", installToken, nonInteractive);
        }
    }

    private static String[] programArgs;
    @ArgGroup(exclusive = false, multiplicity = "1")
    @CommandLine.Command(name = AgentCommand.INSTALL_COMMAND, mixinStandardHelpOptions = true,
            description = "Setup or update the agent service program by install token.")
    void install(InstallArgs installArgs) {
        String[] installArgsValues = installArgs.toString().split(",");
        String installToken = installArgsValues[0];
        boolean nonInteractive = Boolean.parseBoolean(installArgsValues[1]);
        IcbProgram.initProgramMode(ProgramMode.INSTALL);
        MainService mainService = MainService.createInstallInstance(configFile, agentUserFile, backupAgentUserFile, installToken, nonInteractive);
    }

    public static void main(String... args) {
        if (ArgumentValidator.validateArgument(args)) {
            programArgs = args;
            int exitCode = new CommandLine(new Agent()).execute(args);
            System.exit(exitCode);
        } else 
            //Exit with usage error
            System.exit(ExitCode.USAGE);        
    }
}

【问题讨论】:

    标签: java picocli


    【解决方案1】:

    您可以尝试对installToken 使用arity=1 吗?

        static class InstallArgs {
            @Option(names = {"-t", "--token"},
                    order = 0,
                    arity = "1",
                    interactive = true,
                    description = "The agent install token.",
                    required = true) String installToken ;
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2020-09-09
      • 1970-01-01
      • 2023-03-24
      • 2021-04-29
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多