2014-10-08 99 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更具體的消息。

相關問題