輸入處理器

概觀

當任務想要提示使用者輸入時,它不會從主控台讀取輸入,因為這會讓 Apache Ant 無法嵌入在 IDE 中。相反地,它會要求實作 org.apache.tools.ant.input.InputHandler 介面的實作提示使用者,並將使用者輸入傳回給任務。

為此,任務會建立一個 InputRequest 物件,並將其傳遞給 InputHandler。此類 InputRequest 可能知道給定的使用者輸入是否有效,而 InputHandler 應該拒絕所有無效的輸入。

每個 Ant 程序只會關聯一個 InputHandler 實例,使用者可以使用 -inputhandler 命令列開關指定實作。

輸入處理器

InputHandler 介面包含一個方法

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

並有一些前置和後置條件。主要後置條件是此方法不得在 request 認為使用者輸入有效之前傳回;在此情況下,它可以擲回例外。

Ant 附帶此介面的三個內建實作

DefaultInputHandler

這是當您完全不使用 -inputhandler 命令列開關時取得的實作。此實作會將封裝在 request 物件中的提示列印到 Ant 的記錄系統,並重新提示輸入,直到使用者輸入 request 物件認為有效的輸入為止。輸入將從主控台讀取,使用者需要按下 Return 鍵。

PropertyFileInputHandler

如果您想要執行無人值守的建置程序,此實作會很有用。它會從屬性檔讀取所有輸入,如果在這個檔案中找不到有效的輸入,就會讓建置失敗。屬性檔的名稱必須在 Java 系統屬性 ant.input.properties 中指定。

封裝在 request 中的提示會用作在屬性檔內查詢輸入的鍵。如果找不到任何輸入,則輸入會被視為無效,並且會擲回例外。

請注意 ant.input.properties 必須是 Java 系統屬性,而不是 Ant 屬性。也就是說,您無法將它定義為 ant 的簡單參數,但您可以在 ANT_OPTS 環境變數中定義它。

GreedyInputHandler

自 Ant 1.7 起

與預設實作一樣,此 InputHandler 會從標準輸入讀取。但是,它會使用所有可用的輸入。此行為對於透過作業系統管線傳送 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