Groovy CliBuilder:第一个选项还是第二个选项

Groovy CliBuilder:第一个选项还是第二个选项,groovy,Groovy,我定义了以下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

我定义了以下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未按要求定义,但至少应定义其中一个,否则程序应失败/应执行方法用法()

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

对于参数之间的一个或条件,似乎没有任何特别的方法。你可以试着自己做,像这样的事情似乎很管用:

//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的更具体消息