3 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
過(guò)去,在這些情況下,我增加了第二個(gè)選項(xiàng)。所以在你的例子中,-b。
-b [bvalue] If -a is enabled, ensure that it uses bvalue to thinginate.
如果第二個(gè)(可選)值充當(dāng)標(biāo)志,則它可以只是一個(gè)布爾標(biāo)志。
如果第二個(gè)(可選)值是一些更任意的輸入,則第二個(gè)選項(xiàng)可以采用單個(gè)必需的參數(shù)。
雖然我相信你有理由把你的參數(shù)組織成,但它通常會(huì)導(dǎo)致一個(gè)更有用的命令行,無(wú)論如何都沒(méi)有這些多層的可選性(即選項(xiàng)中存在第二位可選值)。您可以將其視為兩級(jí)和三級(jí)嵌套菜單之間的UX差異。由于項(xiàng)目數(shù)量有限,兩級(jí)菜單通常更可用。(如果沒(méi)有更具體的用例細(xì)節(jié),答案必須是泛泛而談的。-a reqdval optval

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
所以你有一個(gè)選項(xiàng),可以提供零個(gè)或一個(gè)時(shí)間,可以有一個(gè)或兩個(gè)值?
final Options options = new Options() .addOption(Option.builder("a").hasArg().hasArgs().build());CommandLine cmd = new DefaultParser().parse(options, args); LOG.debug(Arrays.asList(args).toString() + " : " + Arrays.asList(cmd.getOptionValues("a")).toString());
DEBUG :: [-a, b] : [b] DEBUG :: [-a, b, c] : [b, c]
您可能希望在提供太多或太少的參數(shù)時(shí)引發(fā)自己的分析異常。
如果您想多次提供答案,請(qǐng)查看此答案:https://stackoverflow.com/a/64611857/8656281-a

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
根據(jù)我對(duì) appache-commons-cli 文檔的理解(我可能是錯(cuò)的),似乎沒(méi)有辦法在每個(gè)參數(shù)的基礎(chǔ)上設(shè)置“可選Arg”。
另外,我看到它在示例中使用的方式,它似乎在兩者之間使用分隔符的參數(shù),如in而不是空格?我不確定這一點(diǎn)。-D<property>=<value>
但是,是的,對(duì)于你想要的,你可以把它弄臟并允許可選參數(shù),然后在選項(xiàng)沒(méi)有必需的參數(shù)時(shí)拒絕它(違背了我知道使用commons-cli的目的)。
編輯:您是否嘗試過(guò)使用模式選項(xiàng)生成器?這個(gè)例子引起了我的興趣:
例如,以下內(nèi)容允許命令行標(biāo)志為“-v -p 字符串值 -f /dir/文件”。感嘆號(hào)位于強(qiáng)制選項(xiàng)之前。
Options options = PatternOptionBuilder.parsePattern("vp:!f/");
它說(shuō)感嘆號(hào)可以在強(qiáng)制選項(xiàng)之前使用,但我不確定它是否可以與強(qiáng)制參數(shù)一起使用?不過(guò)我沒(méi)有嘗試過(guò)。
添加回答
舉報(bào)