3

commons-cli を使用して単純な引数パーサーを作成しようとしていますが、次のオプションを作成する方法がわかりません。

java ... com.my.path.to.MyClass producer 
java ... com.my.path.to.MyClass consumer -j 8

プログラムへの最初の引数は、 または のいずれproducerconsumerで、プログラムが実行されるモードを定義する必要があります。consumerモードの場合-j、サービスするスレッド数を定義する引数が必要です。

ここに私がこれまでに持っているものがあります:

Options options = new Options();
options.addOption("mode", false, "Things.");

HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("startup.sh", options);

これらのオプションを印刷すると、modeパラメーターは として表示され-modeます。

Python ではargparse、次のようにします。

parser = argparse.ArgumentParser()
parser.add_argument('mode', choices=('producer', 'consumer'), required=True)
parser.print_help()

これはまさに私が探していることを行います。commons-cli でこれを行うにはどうすればよいですか?

4

3 に答える 3

4

このようなことに対して私が行ったことは、クラスごとに個別のオプションを用意することです。メインで、最初の引数を確認して、パーサーに渡すリストを決定します。FWIW、私はそれを「ハック」ソリューションとは考えていません。

于 2014-08-28T15:40:02.760 に答える
2

JCommanderが答えです。commons-cli はこれらのオプションをサポートしていないようです。

于 2014-08-31T19:50:06.093 に答える
2

picocliは Groovy 2.5.x に含まれるようになりました。サブコマンドのサポートが組み込まれています。

于 2018-09-16T03:55:53.420 に答える