我正在将 Common CLI 用于个人项目。我没有从文档中找到的一件事是如何强制某个论点呈现。
为了澄清我的问题,我可以定义参数和选项之间的不同,命令:
mycommand file.txt -b 2
mycommand is the command,
file.txt is the argument
-b 2 is the option where 2 is the option value
使用 Common CLI,我可以添加 -b 2 作为这样的选项:
options.addOption( "b", true, "Some message" );
并使用以下方法解析参数:
CommandLineParser commandParser = new GnuParser();
CommandLine result = commandParser.parse(options, args)
但是如何指定 file.txt 也是必需的?
非常感谢
最佳答案
编辑:我没有意识到你的意思是让目标(不是一个选项)成为必需的。
如果您使用完整的解析方法 CommandLineParser.parse(Options, String[], boolean)
并将可选标志设置为 false,那么解析器将跳过未知参数。
您可以稍后通过返回 String[] 的方法 getArgs()
检索它们
然后你可以通过这些字符串来确保有一个名为 file.txt 的字符串
Options options = new Options();
options.addOption("b", true, "some message");
String[] myArgs = new String[]{"-b","2", "file.txt"};
CommandLineParser commandParser = new GnuParser();
CommandLine commandline = commandParser.parse(options, myArgs, false);
System.out.println(Arrays.toString(commandline.getArgs()));
将
[file.txt]
打印到屏幕上。所以你添加一个额外的检查来搜索该数组以查找任何所需的目标:
boolean found=false;
for(String unparsedTargets : commandline.getArgs()){
if("file.txt".equals(unparsedTargets)){
found =true;
}
}
if(!found){
throw new IllegalArgumentException("must provide a file.txt");
}
我同意这很困惑,但我不认为 CLI 提供了一种干净的方法来做到这一点。
关于java - Apache 通用 CLI : How to add arguments?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18344088/