允许用户在构建过程中通过提示输入进行交互。为此,它使用配置的 InputHandler。
提示可以通过 message 属性设置,也可以作为嵌套在元素中的字符数据设置。
可以选择通过 validargs 属性定义一组有效的输入参数。Input 任务将不接受与预定义参数不匹配的值。
可以选择从用户输入的值创建属性。然后可以在后续构建运行中使用此属性。Input 然后表现为 属性任务,这意味着不能覆盖现有属性。从 Apache Ant 1.6 开始,如果任务要设置的属性已在项目中设置(并且任务不会有任何影响),则 <input> 不会提示输入。
历史上,关于此任务的一个常见抱怨是它将字符回显到控制台,这是一个严重的安全性缺陷,我们必须立即修复它,等等。这个问题是由于早期版本的 Java 缺乏处理安全控制台输入的(完全功能的)工具。在 Java 6 中,Java API 中的这个缺陷得到了解决,Ant 版本 1.7.1 和 1.8 添加了对 Java 6 安全控制台输入功能的支持(参见 处理程序类型)。
IDE 行为取决于 IDE:有些挂起等待输入,有些允许您输入。对于这种情况,将密码放在(安全的)属性文件中,并在 input 任务之前加载。
| 属性 | 描述 | 必需 |
|---|---|---|
| message | 在构建运行期间显示给用户的消息。 | 否 |
| validargs | 包含有效输入参数的逗号分隔字符串。如果设置,input 任务将拒绝此处未定义的任何输入。输入与 validargs 的比较区分大小写。如果您希望接受 a和 A,则需要在 validargs 中定义这两个参数。 |
否 |
| addproperty | 要从输入创建的属性的名称。行为等同于 属性任务,这意味着不能覆盖现有属性。 | 否 |
| 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。 | 否 |
类路径也可以通过一个或多个嵌套的 <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"/>
与上面相同,但如果用户未输入任何值(只是按了 回车
),则将 db.user 设置为值 Scott-Tiger
。
<input message="Please enter db-username:"
addproperty="db.user"
defaultvalue="Scott-Tiger"/>