java - 定义一个具有强制参数和可选参数的选项

标签 java command-line-arguments apache-commons-cli

我目前正在尝试提出一种构建命令行选项的方法,该选项在提供时可以采用一个必需参数或第二个可选参数(除了必需参数之外)。我正在尝试使用 apache commons cli 来实现这一点。

即myProgram -a [整数]

myProgram -a "test" --> isValid
myProgram -a "test" 2 --> also isValid

我尝试过: Option.builder("a").hasArg().numberOfArgs(2).optionalArg(true).build();

&

Option.builder("a").hasArg().numberOfArgs(2).build();

两者都没有按预期工作。第一个示例使两个参数都是可选的,并且允许传递空参数,这违反了要求。

第二个示例使两个参数都是必需的,并且在仅提供字符串类型 arg 时失败。

我查看了 commons cli 的文档,但他们提供的用例并没有涉及像这样的复杂案例,同样也没有从 api 文档中获得太多详细信息。

我预计当 -a 未提供任何值时程序会失败,但当提供 1 或 2 个参数(如前所示)时程序会成功。

最佳答案

过去,在这种情况下,我添加了第二个选项。因此,在您的示例中,-b。

-b [bvalue]   If -a is enabled, ensure that it uses bvalue to thinginate.

如果您的第二个(可选)值充当标志,它可以只是一个 boolean 标志。

如果您的第二个(可选)值是一些更任意的输入,则第二个选项可以采用单个必需参数。

虽然我确信您有理由将参数组织为 -a reqdval optval,但它通常会导致更有用的命令行无论如何都不具有这些多层可选性(即选项中存在第二位可选值)。您可以将其视为两级和三级嵌套菜单之间的用户体验差异。由于项目数量有限,两级菜单通常更有用。 (如果没有更具体的用例细节,答案必须是笼统的。)

关于java - 定义一个具有强制参数和可选参数的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583718/

相关文章:

c# - 用于打开文件的 WPF 命令行参数给出无限循环

java - 如何使用 Apache Commons CLI 库来处理 "complex"参数?

java - 我如何在 junit 测试中获取部分执行时间

java - 如何在 JBehave 的测试执行中包含和排除场景?

java - ThreadMXBean.dumpAllThreads() 最大深度

python - 在 python 而不是 shell 中使用命令行参数

go - 将命令行字符串解析为 Golang 中的标志和参数

java - 有没有办法从 Apache commons-cli 选项值中自动去除前导空格?

java - Apache CLI 命令行 : Remove an option that was parsed

java - 从不同的类控制另一个类