9

コマンドライン引数の解析にはApacheCommonsCLIを使用しています。

ヘルプに複数の引数値の名前を表示する方法を探しています。オプション「startimport」の1つの引数の例を次に示します。

Option startimport = OptionBuilder
                .withArgName("environment")
                .hasArg()
                .withDescription(
                        "Description")
                .create("startimport");

-helpを使用すると、次のように出力されます。

-startimport <environment>                    Description

それは大丈夫です。しかし、2つの引数を使用したい場合はどうなりますか?

Option startimport = OptionBuilder
                .withArgName("firstArg secondArg")
                .hasArgs(2)
                .withDescription("Description")
                .create("startimport ");

2つの引数の解析は問題ではありませんが、「-help」に次の出力が必要です。

startimport <firstArg> <secondArg>                    Description

しかし、現在私はただ得るでしょう:

startimport <firstArg secondArg>                    Description

その問題の適切な解決策はありますか?

4

2 に答える 2

26

この問題を正しく動作する方法で解決する方法を見つけました。これは、Googleが調査中に導いたページの1つであるため、共有したいと思いました。このコードは、CommonsCLI1.2を使用して記述されています。

Option searchApp = OptionBuilder.withArgName("property> <value")
            .withValueSeparator(' ')
            .hasArgs(2)
            .withLongOpt("test")
            .withDescription("This is a test description.")
            .create("t");

ヘルプメッセージは次のようになります。

-t,--test <property> <value>    This is a test description.

次のようにコマンドラインから使用できます。

java -jar program.jar -t id 5

引数のString[]は、次のようなコードで取得できます。

Options options = new Options();
options.addOption(searchApp);
PosixParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);
String[] searchArgs = cmd.getOptionValues("t");

searchArgs[0]次に、とを使用して値を取得できますsearchArgs[1]

于 2013-02-26T15:52:54.197 に答える
11

私はこの問題を解決するためにいたずらな方法を使用しました。

    OptionBuilder.hasArgs(3);
    OptionBuilder.withArgName("hostname> <community> <oid");
    OptionBuilder.withDescription("spans switch topology. Mutually exclusive with -s");
    Option my_a = OptionBuilder.create("a");

ヘルプに正しく表示されるようになりました。これが結果をもたらすかどうかはわかりませんが。

于 2012-11-20T04:58:24.287 に答える