如何创建通过未知选项的Groovy CliBuilder?
我有以下资料:如何创建通过未知选项的Groovy CliBuilder?,groovy,Groovy,我有以下资料: final String scriptName = new File(getClass().protectionDomain.codeSource.location.path).getName() final cli = new CliBuilder( stopAtNonOption: false, usage: "${scriptName} ARGUMENTS", width: 80) cli.with { _ longO
final String scriptName = new File(getClass().protectionDomain.codeSource.location.path).getName()
final cli = new CliBuilder(
stopAtNonOption: false,
usage: "${scriptName} ARGUMENTS",
width: 80)
cli.with {
_ longOpt: "known-option-0", args: 1, argName: "KNOWN_OPTION_0", "Known option."
_ longOpt: "known-option-1", args: 1, argName: "KNOWN_OPTION_1", "Known option."
}
我希望能够将其称为:
options = cli.parse(['--known-option-0=0', '--unknown-option=aoeu', '--known-option-1=1'])
这样就不会出现解析错误,而不必向接受的选项列表中添加--unknown选项,并且同时设置known-option-0和known-option-1
如果我设置:
stopAtNonOption: true,
不会发出错误,但:
options.'known-option-0' == 0
options.'known-option-1' == false
如何解析所有已知选项并忽略未知选项?class-CliParser{
class CliParser {
final CliBuilder cli
final List<Cli> options_list = []
final List<String> arguments_list = []
CliParser(CliBuilder cli) {
this.cli = cli
}
Collection getOptions() {
cli.options.getOptions()
}
Cli parse(List<String> args) {
while (args.size() != 0) {
groovy.util.OptionAccessor options = cli.parse(args)
options_list.add(options)
List<String> arguments = options.arguments()
arguments_list.add(arguments[0])
args = (arguments.size() > 1) ? arguments[1..-1] : []
}
return new Cli(options: options_list, arguments: arguments_list)
}
}
class Cli {
List<groovy.util.OptionAccessor> options
List<String> arguments
List<String> arguments() {
arguments
}
List<Option> getOptions() {
options.collect {
it.getOptions()
}
}
Object getProperty(String name) {
final optionAccessor = options
.find {
it.hasOption(name)
}
optionAccessor?.getProperty(name)
}
}
final String scriptName = new File(getClass().protectionDomain.codeSource.location.path).getName()
final cliBuilder = new CliBuilder(
stopAtNonOption: false,
usage: "${scriptName} ARGUMENTS",
width: 80)
cliBuilder.with {
_ longOpt: "known-option-0", args: 1, argName: "KNOWN_OPTION_0", "Known option."
_ longOpt: "known-option-1", args: 1, argName: "KNOWN_OPTION_1", "Known option."
}
final cliParser = new CliParser(cliBuilder)
final cli = cliParser.parse(args)
最终CliBuilder cli
最终列表选项\u List=[]
最终列表参数\u List=[]
CliParser(CliBuilder cli){
this.cli=cli
}
集合getOptions(){
cli.options.getOptions()
}
Cli解析(列表参数){
while(args.size()!=0){
groovy.util.OptionAccessor options=cli.parse(args)
选项列表。添加(选项)
列表参数=选项。参数()
参数列表。添加(参数[0])
参数=(arguments.size()>1)?参数[1..-1]:[]
}
返回新Cli(选项:选项列表,参数:参数列表)
}
}
类Cli{
列出选项
列表参数
列表参数(){
论据
}
列表getOptions(){
选项。收集{
it.getOptions()
}
}
对象getProperty(字符串名称){
最终选项Accessor=选项
.找到{
it.haspoption(名称)
}
optionAccessor?.getProperty(名称)
}
}
最终字符串scriptName=新文件(getClass().protectionDomain.codeSource.location.path).getName()
最终cliBuilder=新cliBuilder(
stopAtNonOption:false,
用法:“${scriptName}参数”,
宽度:80)
cliBuilder.with{
_longOpt:“已知选项-0”,args:1,argName:“已知选项0”,“已知选项。”
_longOpt:“已知选项1”,args:1,argName:“已知选项1”,“已知选项”
}
最终cliParser=新的cliParser(cliBuilder)
final cli=cliParser.parse(args)
类语法分析器{
最终CliBuilder cli
最终列表选项\u List=[]
最终列表参数\u List=[]
CliParser(CliBuilder cli){
this.cli=cli
}
集合getOptions(){
cli.options.getOptions()
}
Cli解析(列表参数){
while(args.size()!=0){
groovy.util.OptionAccessor options=cli.parse(args)
选项列表。添加(选项)
列表参数=选项。参数()
参数列表。添加(参数[0])
参数=(arguments.size()>1)?参数[1..-1]:[]
}
返回新Cli(选项:选项列表,参数:参数列表)
}
}
类Cli{
列出选项
列表参数
列表参数(){
论据
}
列表getOptions(){
选项。收集{
it.getOptions()
}
}
对象getProperty(字符串名称){
最终选项Accessor=选项
.找到{
it.haspoption(名称)
}
optionAccessor?.getProperty(名称)
}
}
最终字符串scriptName=新文件(getClass().protectionDomain.codeSource.location.path).getName()
最终cliBuilder=新cliBuilder(
stopAtNonOption:false,
用法:“${scriptName}参数”,
宽度:80)
cliBuilder.with{
_longOpt:“已知选项-0”,args:1,argName:“已知选项0”,“已知选项。”
_longOpt:“已知选项1”,args:1,argName:“已知选项1”,“已知选项”
}
最终cliParser=新的cliParser(cliBuilder)
final cli=cliParser.parse(args)