picocli:ArgGroup中的依赖参数

picocli:ArgGroup中的依赖参数,picocli,Picocli,我的问题与所问的问题相似,也更简单 我有三个选项,-A,-A1,-A2(从概念上讲,是单个组的一部分)。所需的关系包括: 这两项都不是必需的 -A应与-A1或-A2 -A1和-A2都可以用一个-a 换言之: 有效规范:-A-A1、-A-A2和-A-A1-A2 无效规范:-A、-A1、-A2和-A1-A2 这是我使用两个@ArgGroups得到的: 导入picocli.CommandLine; 导入picocli.CommandLine.*; 导入picocli.CommandLine.Mod

我的问题与所问的问题相似,也更简单

我有三个选项,
-A
-A1
-A2
(从概念上讲,是单个组的一部分)。所需的关系包括:

  • 这两项都不是必需的
  • -A
    应与
    -A1
    -A2
  • -A1
    -A2
    都可以用一个
    -a
  • 换言之:

    • 有效规范:
      -A-A1
      -A-A2
      -A-A1-A2
    • 无效规范:
      -A
      -A1
      -A2
      -A1-A2
    这是我使用两个
    @ArgGroup
    s得到的:

    导入picocli.CommandLine;
    导入picocli.CommandLine.*;
    导入picocli.CommandLine.Model.CommandSpec;
    公共类应用程序实现可运行{
    静态类MyGroupX{
    @选项(names=“-A1”,required=false)布尔值A1;
    @选项(names=“-A2”,required=false)布尔A2;
    }
    静态类MyGroup{
    @选项(names=“-A”,required=true)布尔值A;
    @ArgGroup(exclusive=false,multiplicity=“1”)MyGroupX MyGroupX;
    }
    @ArgGroup(exclusive=false)MyGroup MyGroup;
    @规范命令规范;
    @凌驾
    公开募捐{
    System.out.printf(“确定:%s%n”,规范命令行().getParseResult().originalArgs());
    }
    公共静态void main(字符串[]args){
    //测试:这些应该是有效的
    新命令行(新应用()).execute();
    新命令行(newapp()).execute(“-A-A1”.split(”);
    新命令行(newapp()).execute(“-A-A2”.split(”);
    新命令行(newapp()).execute(“-A-A1-A2”).split(”);
    //测试:这些应该失败
    新命令行(newapp())。执行(“-A”);
    新命令行(newapp())。执行(“-A1”);
    新命令行(newapp())。执行(“-A2”);
    新命令行(newapp()).execute(“-A1-A2.split(”);
    }
    }
    
    有没有更简单的方法


    谢谢

    某些关系不能仅用
    @ArgGroup
    注释来表示,在这种情况下,应用程序中需要自定义验证逻辑

    但是,您的应用程序并非如此。在我看来,您已经找到了一种非常简洁的方式来表达您的需求

    有效的用户输入序列
    -A-A1
    -A-A2
    -A-A1-A2
    均被接受

    无效的用户输入序列均被拒绝,并显示一条相当清晰的错误消息:

    Input     Error message
    -----     -------------
    -A        Missing required argument(s): ([-A1] [-A2])
    -A1       Missing required argument(s): -A
    -A2       Missing required argument(s): -A
    -A1 -A2   Missing required argument(s): -A
    

    应用程序在代码中没有任何显式验证逻辑的情况下实现了所有这些,所有这些都是通过注释以声明方式完成的。我想说,任务完成了。我看不到进一步改进的方法。

    某些关系不能仅用
    @ArgGroup
    注释来表示,在这种情况下,应用程序中需要自定义验证逻辑

    但是,您的应用程序并非如此。在我看来,您已经找到了一种非常简洁的方式来表达您的需求

    有效的用户输入序列
    -A-A1
    -A-A2
    -A-A1-A2
    均被接受

    无效的用户输入序列均被拒绝,并显示一条相当清晰的错误消息:

    Input     Error message
    -----     -------------
    -A        Missing required argument(s): ([-A1] [-A2])
    -A1       Missing required argument(s): -A
    -A2       Missing required argument(s): -A
    -A1 -A2   Missing required argument(s): -A
    

    应用程序在代码中没有任何显式验证逻辑的情况下实现了所有这些,所有这些都是通过注释以声明方式完成的。我想说,任务完成了。我看不到进一步改进的方法。

    我同意它足够紧凑。所以,我没有错过任何东西。很高兴知道。再次感谢。我同意它足够紧凑。所以,我没有错过任何东西。很高兴知道。再次感谢。