2014-10-08 71 views
0

我定义了以下CliBuilder选项:CliBuilder:一选项或第二个选项

#!/usr/bin/env groovy 

import org.apache.commons.cli.Option 

def cli = new CliBuilder() 

cli.with { 
    d(longOpt: 'database', 'database', args: 1, required: true) 
    u(longOpt: 'user', 'user', args: 1, required: true) 
    p(longOpt: 'password', 'password', args: 1, required: true) 

    _(longOpt: 'doFoo', argName: 'foo param', args: 1, "make foo.") 
    _(longOpt: 'doBar', 'do bar.') 
} 

def opt = cli.parse(args) 

if (!opt) return 
if (opt.h) cli.usage() 

println "Hooray" 

参数d,u和p的定义为需要。 doFoo和doBar都是而不是按需定义,但其中一个应该至少定义为,否则程序应该失败/应该执行方法usage()。

解决这个问题的最好方法是什么?有没有办法实现一种条件(doFoo或doBar)?

回答

0

它看起来并不像API具有任何特定的参数之间的OR条件。你可以尝试做自己,这样的事情似乎工作:

//same code above 
def opt = cli.parse(args) 
if(!(opt.getInner().options.find { it.longOpt == 'doFoo'} || opt.getInner().options.find { it.longOpt == 'doBar'})) { 
    println "Must include doFoo or doBar!" 
    cli.usage() 
    return 
} 
//same code below 

它会输出相同的用法消息加上约包括doFoo或doBar更具体的消息。

相关问题