Apache Commons CLI:将非法参数传递给选项后没有抛出异常
Apache Commons CLI: no exception thrown after passing illegal arguments to options
我的问题是,当一个不应该接受任何参数的选项被赋予一个参数时,我没有看到任何异常抛出。
只是标准设置,直接来自文档
Options options = new Options();
CommandLineParser parser = new DefaultParser();
CommandLine cmd;
选项:
Option op = Option.builder("op")
.longOpt("op")
.hasArg(false)
.desc("bla")
.build();
options.addOption(op);
尝试捕捉:
try {
cmd = parser.parse(options, args);
if (cmd.hasOption("op") { //do something }
} catch (ParseException | IllegalArgumentException exp) {
System.err.println(exp.getMessage());
System.exit(0);
}
我已经尝试了 Option.Builder class(link) 中提供的所有似乎相关的方法,但其中 none 在 [=13 处抛出异常=] 带有参数,例如 -op hello
在 Apache Commons CLI 中是否存在处理非法选项参数的异常 class 还是我们必须手动执行? (那么像 hasArg(boolean hasArg) 这样的方法有什么意义呢?)
Commons CLI 支持“尾随参数”,即 <options> arg1 [arg2...]
。
如果您查看 getArgs()
或 getArgList()
,您会发现该选项未解析该值,因此它最终出现在尾随参数列表中。
Option op = Option.builder("op")
.longOpt("op")
.hasArg(false)
.desc("bla")
.build();
Options options = new Options();
options.addOption(op);
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, new String[] {"-op", "bla"});
assertTrue(cmd.hasOption(op));
assertEquals("[bla]", cmd.getArgList().toString());
assertEquals("[bla]", Arrays.toString(cmd.getArgs()));
我没有找到禁止此类尾随参数的方法。
所以如果你想在这种情况发生时失败,你可以检查并抛出异常 if getArgs() returns 一个 non-empty 数组。
我的问题是,当一个不应该接受任何参数的选项被赋予一个参数时,我没有看到任何异常抛出。
只是标准设置,直接来自文档
Options options = new Options();
CommandLineParser parser = new DefaultParser();
CommandLine cmd;
选项:
Option op = Option.builder("op")
.longOpt("op")
.hasArg(false)
.desc("bla")
.build();
options.addOption(op);
尝试捕捉:
try {
cmd = parser.parse(options, args);
if (cmd.hasOption("op") { //do something }
} catch (ParseException | IllegalArgumentException exp) {
System.err.println(exp.getMessage());
System.exit(0);
}
我已经尝试了 Option.Builder class(link) 中提供的所有似乎相关的方法,但其中 none 在 [=13 处抛出异常=] 带有参数,例如 -op hello
在 Apache Commons CLI 中是否存在处理非法选项参数的异常 class 还是我们必须手动执行? (那么像 hasArg(boolean hasArg) 这样的方法有什么意义呢?)
Commons CLI 支持“尾随参数”,即 <options> arg1 [arg2...]
。
如果您查看 getArgs()
或 getArgList()
,您会发现该选项未解析该值,因此它最终出现在尾随参数列表中。
Option op = Option.builder("op")
.longOpt("op")
.hasArg(false)
.desc("bla")
.build();
Options options = new Options();
options.addOption(op);
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, new String[] {"-op", "bla"});
assertTrue(cmd.hasOption(op));
assertEquals("[bla]", cmd.getArgList().toString());
assertEquals("[bla]", Arrays.toString(cmd.getArgs()));
我没有找到禁止此类尾随参数的方法。
所以如果你想在这种情况发生时失败,你可以检查并抛出异常 if getArgs() returns 一个 non-empty 数组。