Java >> Java チュートリアル >  >> Java

Java コマンドライン インターフェイス (パート 8):Argparse4j

Argparse4j は「Java コマンドライン引数パーサー ライブラリ」であり、そのメイン ページでは「Python の argparse モジュールに基づく Java 用のコマンド ライン引数パーサー ライブラリ」と説明されています。この記事では、Argparse4j 0.7.0 を使用してコマンドライン引数を処理する方法を簡単に見ていきます。これは、Java でのコマンドライン処理に関するこのシリーズの以前の 7 つの記事で解析したものと似ています。

Argparse4j を使用したコマンドライン処理の引数の「定義」段階は、ArgumentParser インターフェイスとその addArgument(String…) メソッドを介して実行できます。 addArgument(String...) の戻り型 メソッドは Argument インターフェイスのインスタンスです。そのインターフェース (通常は ArgumentImpl) の実装は、各引数の特性を設定するためのメソッドを提供します。これらのメソッドはそれぞれ Argument のインスタンスを返すため 、これらの呼び出しは非常に流暢な方法で連鎖できます。これは、次の画面のスナップショットで示されています。

Argparse4j による「定義」ステージ

final ArgumentParser argumentParser =
   ArgumentParsers.newArgumentParser("Main", true);
argumentParser.addArgument("-f", "--file")
              .dest("file")
              .required(true)
              .help("Path and name of file");
argumentParser.addArgument("-v", "--verbose")
              .dest("verbose")
              .type(Boolean.class)
              .nargs("?")
              .setConst(true)
              .help("Enable verbose output.");

上記のコード リストでは、ArgumentParser のインスタンス String を期待する静的初期化メソッドでインスタンス化されます 使用法/ヘルプ出力に含まれるスクリプトまたはプログラム名を表す引数。 ArgumentParsers の newArgumentParse(String, boolean) メソッドの 2 番目の引数は、「ヘルプ」オプション -h を指定します。 そして --help 自動的にサポートされます。

上記のコード リストで定義されている最初の引数を使用すると、ファイル パスと名前をコマンド ラインで指定できます。文字列「-f」と「–file」が addArgument(String...) に渡されます メソッド、つまり -f のいずれか または --file コマンドラインで使用して、ファイルのパスと名前を指定できます。 Argument のインスタンスで 3 つの追加メソッド [dest(String)、required(boolean)、および help(String)] が呼び出されます この最初の引数の指定の一部として作成されます。これら 3 つのメソッドは、コード内で引数を参照できる名前、コマンド ラインに引数が存在する必要があること、およびその引数のヘルプが要求されたときに表示される文字列をそれぞれ指定します。

上記のコード リストで定義されている 2 番目の引数は、文字列「-v」と「–verbose」を addArgument(String...) に渡します。 この引数を短いオプション名または長いオプション名のいずれかでコマンド ラインに表示できるようにするメソッド。最初の引数と同様に、これには dest(String) によって設定されたコードで参照される名前があります。 メソッドであり、help(String) で指定された「ヘルプ」出力の文字列があります。 方法。この 2 番目の引数は必須ではないため、required(boolean) メソッドはここでは不要です。

2 番目の引数の定義には、Argument に関するいくつかの追加メソッドがあります。 呼ばれた。 type(Class) を使用して、引数に期待される Java データ型を明示的に指定できることを示しました。また、verbosity 引数がフラグで提供される値を必要としないことを指定するために、nargs(String) メソッドと setConst(Object) メソッドの組み合わせを指定する必要がありました。これにより、 -v を指定できます または --verbose 明示的に述べられると予想されるオプションの後に「true」または「false」を付けないでください。

コマンドライン処理の「解析」段階は、ArgumentParser の parseArgs(String[]) メソッドへの呼び出しにより、argparse4j でサポートされています。次のコード リストは、これを示しています。

Argparse4j による「解析」コマンド ライン引数

final Namespace response = argumentParser.parseArgs(arguments);

解析に必要なステートメントは 1 つだけで、Namespace のインスタンスを返します。

Argparse4j を使用したコマンド ライン処理の「問い合わせ」段階では、解析されたコマンド ライン引数に Map からアクセスします。 その Namespace インスタンスラップ。このマップのキーは、dest(String) で指定された文字列です。 メソッドとマップの値は、それらの引数名に関連付けられた値です。これらの値の調査は、次のコード リストに示されています。

Argparse4j によるコマンド ライン引数の「問い合わせ」

final String filePathAndName = response.getString("file");
final Boolean verbositySet = response.getBoolean("verbose");

out.println(
     "Path/name of file is '" + filePathAndName
   + "' and verbosity is "
   + (Boolean.TRUE.equals(verbositySet) ? "SET" : "NOT SET")
   + ".");

上記のコードでは、同じ文字列が dest(String) で提供されているため、「file」と「verbose」のキーが使用されています。 予想される引数を定義するときのメソッド。

上記のコード スニペットが抽出された完全なソース コードは、GitHub で確認できます。

次の画面のスナップショットは、引数を指定せずに単純な Java アプリケーションを実行した場合と、必要な「ファイル」引数が欠落しているというメッセージが表示されていることを示しています。

上の画面のスナップショットに示されているすべて大文字の「FILE」は、dest(String) で指定された文字列に由来します。 予想される引数を定義するときのメソッド。つまり、その dest(String) 仕様は、引数マッピングが内部的にキー付けされる文字列と、ヘルプ/使用法に表示されるターゲット文字列の両方を設定します。

次の画面のスナップショットは、「file」オプションと「verbose」オプションの典型的な使用法のいくつかのバリエーションを示しています。

最後の画面のスナップショットは、-h に提供されるヘルプ情報を示しています。 または --help ArgumentParser の元のインスタンスのためのオプション 「addHelp」引数を true に設定して作成されました .

Java でのコマンドライン解析に役立つフレームワークまたはライブラリを選択する際に考慮すべき、Argparse4j のその他の特性を次に示します。

  • Argparse4j はオープン ソースであり、MIT ライセンスでライセンスされています。
  • argparse4j-0.7.0.jar (2015 年 12 月) のサイズは約 89 KB で、追加のサードパーティ ライブラリの依存関係はありません。
  • Argparse4j は注釈を使用しません。
  • オンライン ドキュメントには、Clojure の例が含まれています。
  • Python でスクリプトを作成する Java 開発者 (特に argparse を使用する場合) は、コマンドライン引数を解析する必要がある Java アプリケーションで argparse4j を使用すると、利点が得られると思います。
    • (Java でコマンドライン引数を処理する場合、Apache Commons CLI は直感的であると思います。これは、Java よりも Groovy でコマンドライン引数を解析する頻度の方がはるかに高く、Groovy は組み込みの Apache Commons CLI サポートを提供するためです)
  • Argparse4j は、Scala 用の argparse4s の開発に影響を与えました。

Argparse4j は、数多くある Java ベースのコマンド ライン処理ライブラリの 1 つにすぎません。 Argparse4j を他の多数のオプションと最も際立たせる特徴は、その argparse の遺産です。それを考えると、Java コマンド ライン処理のニーズに Argparse4j を選択する可能性が最も高い Java 開発者は、argparse を使用して Python ベースのスクリプトやツールでコマンド ライン引数を頻繁に解析する開発者、または Python と argparse のコマンド解析セマンティクスを好む開発者であると考えられます。 .

その他の参考文献

  • Argparse4j
  • Argparse4j ユーザー マニュアル
  • Argparse4j の例
  • Argparse4j API ドキュメント (Javadoc)
  • GitHub の Argparse4j ソース
  • Argparse4j リリース (ダウンロード)
  • Argparse4j 0.7.0 (Maven)

Java タグ