Groovy CliBuilder:第一个选项还是第二个选项
我定义了以下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
#!/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的更具体消息