【发布时间】:2023-03-24 05:42:01
【问题描述】:
您可以在此处找到代码示例。 Link to my GitHub project
在Driver.java文件中,可以看到我指定了一个独占的ArgGroup。我根据文档的理解是默认的多重性是 0..1。文档指出,“默认值为 multiplicity = "0..1",这意味着默认情况下可以省略或指定一个组”。
我还尝试将多重性显式设置为 0..1,但这并没有改变行为。在没有 -al 或 -rl 选项的情况下运行程序,解析会引发 NullPointerException。该框架的行为就像需要其中一个选项一样。这与documentation 不一致。如果我愿意,我应该可以只使用 -n 选项来运行这个程序。我希望 ArgGroup 完全是可选的。
git hub 链接上的程序是一个功能齐全的 maven 项目,可以克隆、构建和运行。然而,这里是堆栈跟踪。没有指定参数或没有 arg 组。我希望完全没有参数可以打印使用信息。此外,该组的默认多重性应该是 0..1,因此我不必指定 arg 组中的选项之一。
java.lang.NullPointerException
at com.shawnfox.java4.concurrency.Driver.call(Driver.java:58)
at com.shawnfox.java4.concurrency.Driver.call(Driver.java:1)
at picocli.CommandLine.executeUserObject(CommandLine.java:1743)
at picocli.CommandLine.access$900(CommandLine.java:145)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2101)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2068)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1935)
at picocli.CommandLine.execute(CommandLine.java:1864)
at com.shawnfox.java4.concurrency.Driver.main(Driver.java:50)
【问题讨论】:
-
NullPointerException 听起来您可能在 picocli 中发现了一个错误。您介意在 picocli 问题跟踪器上提出问题吗?你实际看到的行为是什么?有堆栈跟踪吗?当我到达我的电脑时,我会尝试重现。
-
我就是这么想的。我只是想先征求社区意见,以防我误解了文档。我发布了堆栈跟踪,希望我的期望很明确。另一个问题是,如果没有选项,我会得到一个异常,但如果我在没有选项的情况下运行,我仍然希望显示使用(帮助)信息。在我看来,arg 组本身应该是可选的,除非我指定需要它 1 次或更多次的多重性。我错了吗?
-
感谢堆栈跟踪,这很有用!我更新了我的答案。如果应用程序在
call方法中检查null,则不会有异常。我不确定“如果我在没有选项的情况下运行,我仍然希望显示使用(帮助)信息”是什么意思。这听起来像您希望 picocli 不考虑任何选项无效输入并显示错误,但这不是错误:因为多重性是0..1,所以 arg 组是可选的,所以不指定它很好,对吧? -
在我添加 arg 组之前,未在命令行上指定任何内容总是会导致自动显示帮助。我不需要输入 --help 来获取帮助信息。有了论据组,这种情况就停止了。自从添加了 arg 组后,它的工作方式似乎仍然不正确。
-
对不起,我没有关注。我刚刚检查了 Driver 类,但我不明白为什么当用户没有在命令行上指定任何参数时会显示使用帮助消息。我看不到任何必需的参数。我错过了什么吗?
标签: picocli