在我最大的一个项目中,我一直在使用org.apache.commons.cli.CommandLineParser
很长一段时间。很久以前,我在多个exec类中有很多参数。
前段时间,我注意到对空白和引用的支持已经破缺。简单地说
--parameter="I need something like this"
或有时
--parameter="I would even appreciate espacing \"double quotes\""
根据Apache CLI option value with whitespace,这似乎是一个依赖于操作系统的错误(在我的Windows机器上,解析引用的参数有效,但在Debian服务器上却没有)。
所以我的问题是:是否有任何与Apache Commons CLI相似的替代方案(所以我不需要完全重写),但支持引用?
答案 0 :(得分:0)
Picocli是Commons CLI的替代方法,该方法越来越流行。它同时具有programmatic API和annotations API。
Picocli对解析quoted command line arguments具有出色的支持。
默认情况下,在picocli中保留命令行参数的引号,但是可以使用CommandLine::setTrimQuotes
进行配置。当使用splitting参数时,不分割带引号的字符串(可以使用CommandLine::setSplitQuotedStrings
进行配置)。
示例:
@Command(name = "example")
class Example {
@Option(names = "-x", split = ",")
String[] parts;
}
如果我们给此命令一些带引号的输入:
example -x "-Dvalues=a,b,c","-Dother=1,2"
这将导致parts
数组具有以下值:
"-Dvalues=a,b,c"
"-Dother=1,2"
其他可能感兴趣的picocli功能:
@
文件(或“ argument file”)支持-Dkey=value
map-like options