タスクはユーザーにインプットを求めたい場合、コンソールからインプットをただ読み取るわけではありません。これでは、Apache AntをIDEに埋め込むことが困難になります。代わりに、org.apache.tools.ant.input.InputHandler
インタフェースの実装にユーザーに促し、ユーザーインプットをタスクに返します。
この実現のために、タスクはInputRequest
オブジェクトを作成してInputHandler
に渡します。そのようなInputRequest
は、与えられたユーザーインプットが有効であるかどうかを知っており、InputHandler
は無効なインプットを拒否するはずです。
各Antプロセスに正確に1つのInputHandler
インスタンスが関連付けられ、ユーザーは-inputhandlerコマンドラインスイッチを使用して実装を指定できます。
InputHandler
インタフェースには、具体的には1つのメソッドが含まれています。
void handleInput(InputRequest request) throws org.apache.tools.ant.BuildException;
いくつかの前置条件と後置条件を伴います。主な後置条件は、このメソッドがrequest
がユーザーインプットを有効とみなさない限り戻らないことです。この状況では例外をスローすることが許可されています。
Antにはこのインタフェースの3つの組込み実装が付属しています。
これは、-inputhandlerコマンドラインスイッチをまったく使用しない場合に得られる実装です。この実装は、request
オブジェクトにカプセル化されたプロンプトをAntのロギングシステムに出力し、request
オブジェクトが有効なインプットとみなす内容をユーザーが入力するまでインプットを求め続けます。インプットはコンソールから読み取られ、ユーザーはReturnキーを押す必要があります。
この実装は、無人ビルドプロセスを実行する場合に便利です。これはすべてのインプットをプロパティファイルから読み取り、このファイルで有効なインプットを見つけられない場合にはビルドを失敗させます。プロパティファイルの名前は、Javaシステムプロパティant.input.properties
で指定する必要があります。
request
にカプセル化されたプロンプトは、プロパティファイル内のインプットを検索するときのキーとして使用されます。インプットが見つからない場合、インプットは無効とみなされ、例外がスローされます。
ant.input.properties
は、AntプロパティではなくJavaシステムプロパティであることに注意してください。つまり、antへの単純なパラメータとして定義することはできませんが、ANT_OPTS
環境変数内で定義できます。
Ant 1.7以降
デフォルト実装と同様に、このInputHandlerは標準入力から読み取ります。ただし、使用可能なすべてのインプットを消費します。この動作は、OSパイプ経由でAntインプットを送信する場合に役立ちます。
Ant 1.7.1以降
このInputHandlerは、Java 6以降で使用できるSystem.console().readPassword()
を呼び出します。それ以前のプラットフォームでは、DefaultInputHandler
の動作にフォールバックします。
org.apache.tools.ant.input.InputRequest
のインスタンスは、ユーザーにインプットを求めてこのインプットを検証するために必要な情報をカプセル化します。
InputRequest
のインスタンス自体はどんなインプットも受け付けますが、サブクラスはより厳しい検証を使用する場合があります。ユーザーインプットが定義済みの選択肢の一部である必要がある場合は、org.apache.tools.ant.input.MultipleChoiceInputRequest
を使用する必要があります。