InputHandler

概要

タスクはユーザーにインプットを求めたい場合、コンソールからインプットをただ読み取るわけではありません。これでは、Apache AntをIDEに埋め込むことが困難になります。代わりに、org.apache.tools.ant.input.InputHandlerインタフェースの実装にユーザーに促し、ユーザーインプットをタスクに返します。

この実現のために、タスクはInputRequestオブジェクトを作成してInputHandlerに渡します。そのようなInputRequestは、与えられたユーザーインプットが有効であるかどうかを知っており、InputHandlerは無効なインプットを拒否するはずです。

各Antプロセスに正確に1つのInputHandlerインスタンスが関連付けられ、ユーザーは-inputhandlerコマンドラインスイッチを使用して実装を指定できます。

InputHandler

InputHandlerインタフェースには、具体的には1つのメソッドが含まれています。

void handleInput(InputRequest request)
    throws org.apache.tools.ant.BuildException;

いくつかの前置条件と後置条件を伴います。主な後置条件は、このメソッドがrequestがユーザーインプットを有効とみなさない限り戻らないことです。この状況では例外をスローすることが許可されています。

Antにはこのインタフェースの3つの組込み実装が付属しています。

DefaultInputHandler

これは、-inputhandlerコマンドラインスイッチをまったく使用しない場合に得られる実装です。この実装は、requestオブジェクトにカプセル化されたプロンプトをAntのロギングシステムに出力し、requestオブジェクトが有効なインプットとみなす内容をユーザーが入力するまでインプットを求め続けます。インプットはコンソールから読み取られ、ユーザーはReturnキーを押す必要があります。

PropertyFileInputHandler

この実装は、無人ビルドプロセスを実行する場合に便利です。これはすべてのインプットをプロパティファイルから読み取り、このファイルで有効なインプットを見つけられない場合にはビルドを失敗させます。プロパティファイルの名前は、Javaシステムプロパティant.input.propertiesで指定する必要があります。

requestにカプセル化されたプロンプトは、プロパティファイル内のインプットを検索するときのキーとして使用されます。インプットが見つからない場合、インプットは無効とみなされ、例外がスローされます。

ant.input.propertiesは、AntプロパティではなくJavaシステムプロパティであることに注意してください。つまり、antへの単純なパラメータとして定義することはできませんが、ANT_OPTS環境変数内で定義できます。

GreedyInputHandler

Ant 1.7以降

デフォルト実装と同様に、このInputHandlerは標準入力から読み取ります。ただし、使用可能なすべてのインプットを消費します。この動作は、OSパイプ経由でAntインプットを送信する場合に役立ちます。

SecureInputHandler

Ant 1.7.1以降

このInputHandlerは、Java 6以降で使用できるSystem.console().readPassword()を呼び出します。それ以前のプラットフォームでは、DefaultInputHandlerの動作にフォールバックします。

InputRequest

org.apache.tools.ant.input.InputRequestのインスタンスは、ユーザーにインプットを求めてこのインプットを検証するために必要な情報をカプセル化します。

InputRequestのインスタンス自体はどんなインプットも受け付けますが、サブクラスはより厳しい検証を使用する場合があります。ユーザーインプットが定義済みの選択肢の一部である必要がある場合は、org.apache.tools.ant.input.MultipleChoiceInputRequestを使用する必要があります。