2017-06-19 6 views
1

jCommanderを使用して、Groovyのコマンドラインパラメータを解析しようとしています。GroovyのjCommanderでコマンドラインを解析する(サンプルコードが失敗する)

(のMacBook(エルキャピタン)、Groovyの2.4.11、jCommander-1.49)

jCommander.org(http://jcommander.org/#_groovyを参照)に提供される例は、読み取ります

import com.beust.jcommander.Parameter; 

public class Args { 
    @Parameter 
    private List<String> parameters = new ArrayList<>(); 

    @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity") 
    private Integer verbose = 1; 

    @Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
    private String groups; 

    @Parameter(names = "-debug", description = "Debug mode") 
    private boolean debug = false; 
} 

は私がしようそのコード(グルーヴィーjCommanderSample.groovy)を実行するために私が取得:

[email protected]:~/.../Groovy/CliParameters $ groovy jCommanderSample.groovy 
Caught: groovy.lang.MissingMethodException: No signature of method: static com.beust.jcommander.JCommander.newBuilder() is applicable for argument types:() values: [] 
groovy.lang.MissingMethodException: No signature of method: static com.beust.jcommander.JCommander.newBuilder() is applicable for argument types:() values: [] 
    at jCommanderSample$_run_closure1.doCall(jCommanderSample.groovy:9) 
    at jCommanderSample.run(jCommanderSample.groovy:8) 

私は何が欠けていますか?

+0

lexu、解決策を試す機会がありますか? – Rao

+0

thx Rao。あなたのソリューションは私に間違っていることを理解させました。提供されたコードはスタンドアロンでは実行できません。依然として呼び出し元が必要です。コマンドラインから実行できるパラメータを扱う簡単なスクリプトを追加します。 – lexu

+0

あなたの反応からそれを得ていない。問題に投稿された元の問題は解決されていますか? – Rao

答えて

0

def list = [1, 2] 

変更から:

@Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity") 

へjCommander

#!/usr/bin/env groovy 
import com.beust.jcommander.* 
class Simple { 
    static class Args { 
    @Parameter 
    private List<String> aParamList = []; 
    @Parameter(names = [ "--quiet", "-q" ], description = "quiet mode, no output to STDOUT") 
    private Boolean aQuiet = false; 

    @Parameter(names = [ "--logging", "-l" ], description = "logging verbosity (0-4)") 
    private Integer aLogLevel = 1; 

    @Parameter(names = [ "--group", "-g" ], description = "group name, default is 'none'") 
    private String aGroupName = 'none'; 
    } 

    public static main(String[] pArgs) { 
    Boolean vQuiet ; 
    Integer vLogLevel ; 
    String vGroupName ; 
    List<String> vParamList; 
    new Args().with { 
     try { 
     new JCommander(it, pArgs) 
     vQuiet  = it.aQuiet; 
     vLogLevel = it.aLogLevel; 
     vGroupName = it.aGroupName; 
     vParamList = it.aParamList; 
     } 
     catch(com.beust.jcommander.ParameterException e) { 
     println "Fatal Error parsing arguments: $e.message" 
     System.exit(-1) 
     } 
    } 
    println "unbound parameters: " + vParamList; 
    println "   LogLevel: $vLogLevel"; 
    println "  Silent Mode: $vQuiet"; 
    println "   GroupName: $vGroupName"; 
    } 
} 
1

groovyにリストの定義に違いがあることがあります。 javaでは、{ ..}が使用されます。では、以下のようなGroovy:

サンプルのGroovyスクリプトのために:ここで私は私のスニペットコレクションにコピーされたソリューションだ

@Parameter(names = ["-log", "-verbose" ] , description = "Level of verbosity") 
+0

+1今ではコードが(ほぼ)コンパイルされていますが、コンパイラはmainメソッドが見つからないと不平を言っています。jCommanderのデモ版 – lexu

関連する問題