CliBuilder:第一个选项或第二个选项

时间:2014-10-08 21:06:37

标签: 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: '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 根据需要定义,但其中一个至少应该定义,否则程序应该失败/应该执行方法用法()。

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

1 个答案:

答案 0 :(得分:0)

对于参数之间的OR条件,API看起来没有任何特别的要点。你可以尝试自己做,这样的事情似乎有效:

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