我定义了以下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)?
答案 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的更具体的消息。