输入处理程序

概述

当一个任务需要提示用户输入时,它不会简单地从控制台读取输入,因为这会使在 IDE 中嵌入 Apache Ant 变得不可能。相反,它会请求一个 org.apache.tools.ant.input.InputHandler 接口的实现来提示用户并将用户输入返回给任务。

为此,任务会创建一个 InputRequest 对象并将其传递给 InputHandler。这样的 InputRequest 可能知道给定的用户输入是否有效,而 InputHandler 应该拒绝所有无效输入。

每个 Ant 进程都关联着唯一一个 InputHandler 实例,用户可以使用 -inputhandler 命令行开关指定实现。

输入处理程序

The InputHandler 接口包含一个方法

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

带有一些先决条件和后置条件。主要的后置条件是,此方法必须在 request 认为用户输入有效之前不返回;在这种情况下,它可以抛出异常。

Ant 附带了此接口的三个内置实现

DefaultInputHandler

这是您在根本不使用 -inputhandler 命令行开关时获得的实现。此实现会将封装在 request 对象中的提示打印到 Ant 的日志系统,并重新提示输入,直到用户输入 request 对象认为有效的输入为止。输入将从控制台读取,用户需要按回车键。

PropertyFileInputHandler

如果您想运行无人值守的构建过程,此实现很有用。它从属性文件读取所有输入,如果在该文件中找不到有效输入,则使构建失败。属性文件的名称必须在 Java 系统属性 ant.input.properties 中指定。

封装在 request 中的提示将用作在属性文件中查找输入时的键。如果找不到输入,则认为输入无效,并将抛出异常。

注意 ant.input.properties 必须是 Java 系统属性,而不是 Ant 属性。也就是说,您不能将其定义为 ant 的简单参数,但可以在 ANT_OPTS 环境变量中定义它。

GreedyInputHandler

自 Ant 1.7 起

与默认实现类似,此 InputHandler 从标准输入读取。但是,它会消耗所有可用输入。此行为对于通过 OS 管道发送 Ant 输入很有用。

SecureInputHandler

自 Ant 1.7.1 起

此 InputHandler 调用 System.console().readPassword(),该方法自 Java 6 起可用。在早期平台上,它会回退到 DefaultInputHandler 的行为。

InputRequest

的实例 org.apache.tools.ant.input.InputRequest 封装了向用户请求输入并验证此输入所需的信息。

的实例 InputRequest 本身将接受任何输入,但子类可能会使用更严格的验证。 org.apache.tools.ant.input.MultipleChoiceInputRequest 应该在用户输入必须是预定义选择集的一部分时使用。