當任務想要提示使用者輸入時,它不會從主控台讀取輸入,因為這會讓 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 附帶此介面的三個內建實作
這是當您完全不使用 -inputhandler 命令列開關時取得的實作。此實作會將封裝在 request
物件中的提示列印到 Ant 的記錄系統,並重新提示輸入,直到使用者輸入 request
物件認為有效的輸入為止。輸入將從主控台讀取,使用者需要按下 Return 鍵。
如果您想要執行無人值守的建置程序,此實作會很有用。它會從屬性檔讀取所有輸入,如果在這個檔案中找不到有效的輸入,就會讓建置失敗。屬性檔的名稱必須在 Java 系統屬性 ant.input.properties
中指定。
封裝在 request
中的提示會用作在屬性檔內查詢輸入的鍵。如果找不到任何輸入,則輸入會被視為無效,並且會擲回例外。
請注意 ant.input.properties
必須是 Java 系統屬性,而不是 Ant 屬性。也就是說,您無法將它定義為 ant 的簡單參數,但您可以在 ANT_OPTS
環境變數中定義它。
自 Ant 1.7 起
與預設實作一樣,此 InputHandler 會從標準輸入讀取。但是,它會使用所有可用的輸入。此行為對於透過作業系統管線傳送 Ant 輸入很有用。
自 Ant 1.7.1 起
此 InputHandler 會呼叫 System.console().readPassword()
,自 Java 6 起可用。在較早的平台上,它會回歸到 DefaultInputHandler
的行為。
org.apache.tools.ant.input.InputRequest
的執行個體封裝詢問使用者輸入及驗證此輸入所需的資訊。
InputRequest
的執行個體本身會接受任何輸入,但子類別可能會使用更嚴格的驗證。如果使用者輸入必須屬於預先定義的選項組,則應使用 org.apache.tools.ant.input.MultipleChoiceInputRequest
。