ビルドプロセス中に、入力を求めるプロンプトを表示することで、ユーザーとの対話インタラクションを可能にします。そのため、設定されたInputHandlerを使用します。
プロンプトは、message属性、または要素内にネストされた文字データによって設定できます。
オプションで、validargs属性を使用して有効な入力引数のセットを定義できます。「Input」タスクは、事前定義されたいずれにも一致しない値を受け付けません。
オプションで、ユーザーが入力した値からプロパティを作成できます。このプロパティは、その後のビルド実行で使用できます。「Input」はpropertyタスクとして動作するため、既存のプロパティは上書きできません。Apache Ant 1.6以降、「<input>」は、タスクによって設定されるべきプロパティがプロジェクトですでに設定されている場合(そしてタスクが何の効果も持たない場合)、入力を求めるプロンプトを表示しません。
従来、このタスクに関するよくある不満として、コンソールに文字がエコーバックされることが挙げられていました。これは重大なセキュリティ上の欠陥であり、ただちに修正する必要があります。この問題は、初期バージョンのJavaでは安全なコンソール入力処理のための機能(完全機能のもの)が不足していたことが原因でした。Java 6ではJavaのAPIにおけるこの欠点が解消され、Antバージョン1.7.1と1.8はJava 6の安全なコンソール入力機能のサポートを追加しました(ハンドラータイプを参照)。
IDEの動作はIDEによって異なります。入力待ちでハングするIDEもあれば、入力できるようにするIDEもあります。このような状況では、パスワードを(安全な)プロパティファイルに配置し、「input」タスクの前に読み込んでください。
属性 | 説明 | 必須 |
---|---|---|
message | ビルド実行中にユーザーに表示されるメッセージ。 | いいえ |
validargs | 有効な入力引数をカンマ区切りで含む文字列。設定されている場合、「input」タスクはここで定義されていない入力を受け付けません。入力とvalidargsの比較は大文字と小文字を区別します。「a」と「A」の両方を許可する場合は、validargsの両方に定義する必要があります。 | いいえ |
addproperty | 入力から作成されるプロパティの名前。動作はpropertyタスクと等しく、既存のプロパティは上書きできません。 | いいえ |
defaultvalue | 入力から作成されるプロパティのデフォルト値を定義します。入力が受信されない場合、プロパティ値はデフォルト値に設定されます。 | いいえ |
Ant 1.7以降、ネストされた<handler>
要素を使用してInputHandler
を指定できるため、異なるInput
タスク間で異なるInputHandler
を使用できます。
属性 | 説明 | 必須 |
---|---|---|
type | 「default」、「propertyfile」、「greedy」、または「secure」(Ant 1.8以降)のいずれか。 | これらのいずれか |
refid | プロジェクトの他の場所で定義されたInputHandler への参照。 |
|
classname | InputHandler サブクラスの名前。 |
|
classpath | classnameで使用するクラスパス。 | いいえ |
classpathref | classnameで使用するクラスパスのrefid。 | いいえ |
loaderref | classnameで使用するクラスローダーのrefid。 | いいえ |
クラスパスは、1つ以上のネストされた<classpath>
要素によっても指定できます。
デフォルトのInputHandlerを使用する場合、リターンキーを押すまでビルド実行を一時停止します。具体的な動作は、使用するInputHandler
の実装によって定義されます。
<input/>
「リターンキーを押して続行してください…」というメッセージを表示し、リターンキーを押すまでビルド実行を一時停止します(具体的な動作は実装依存です)。
<input>Press Return key to continue...</input>
「リターンキーを押して続行してください…」というメッセージを表示し、リターンキーを押すまでビルド実行を一時停止します(上記を参照)。
<input message="Press Return key to continue..."/>
「すべてのデータがDBから削除されます。続行しますか(y/n)?」というメッセージを表示し、「y」を入力してビルドを続行するか、「n」を入力して「ユーザーによってビルドが中止されました。」というメッセージと共にビルドを終了します。
<input message="All data is going to be deleted from DB continue (y/n)?" validargs="y,n" addproperty="do.delete"/> <condition property="do.abort"> <equals arg1="n" arg2="${do.delete}"/> </condition> <fail if="do.abort">Build aborted by user.</fail>
「db-usernameを入力してください。」というメッセージを表示し、ユーザーが入力した値をdb.user
プロパティに設定します。
<input message="Please enter db-username:" addproperty="db.user"/>
上記と同じですが、ユーザーが値を入力しなかった場合(単に「return」キーを押した場合)、db.user
を「Scott-Tiger」に設定します。
<input message="Please enter db-username:" addproperty="db.user" defaultvalue="Scott-Tiger"/>