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
应用程序在代码中没有任何显式验证逻辑的情况下实现了所有这些,所有这些都是通过注释以声明方式完成的。我想说,任务完成了。我看不到进一步改进的方法。我同意它足够紧凑。所以,我没有错过任何东西。很高兴知道。再次感谢。我同意它足够紧凑。所以,我没有错过任何东西。很高兴知道。再次感谢。