在建置過程中提示使用者輸入,以允許使用者互動。為此,它使用已設定的 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:有些會暫停等待輸入,有些會讓您輸入。對於這種情況,請將密碼放在(安全的)屬性檔案中,並在 input
任務之前載入。
屬性 | 說明 | 必要 |
---|---|---|
message | 在建置執行期間顯示給使用者的訊息。 | 否 |
validargs | 包含有效輸入引數的逗號分隔字串。如果設定,input 任務將拒絕任何未在此處定義的輸入。輸入與 validargs 的比較會區分大小寫。如果您希望接受 a和 A,您需要在 validargs 中定義兩個引數。 |
否 |
addproperty | 從輸入建立的屬性的名稱。行為等同於 property 任務,這表示現有的屬性無法覆寫。 | 否 |
defaultvalue | 定義從輸入建立的屬性的預設值。如果未收到任何輸入,屬性值將設定為預設值。 | 否 |
自 Ant 1.7 起,可使用巢狀 <handler>
元素來指定 InputHandler
,以便在不同的 Input
任務間使用不同的 InputHandler
。
屬性 | 說明 | 必要 |
---|---|---|
類型 | 下列其中一種:default、 propertyfile、 greedy或 secure(自 Ant 1.8 起)。 |
下列其中一種 |
refid | 參考專案中其他地方定義的 InputHandler 。 |
|
classname | InputHandler 子類別的名稱。 |
|
classpath | 與 classname 搭配使用的類別路徑。 | 否 |
classpathref | 與 classname 搭配使用的類別路徑的 refid。 | 否 |
loaderref | 與 classname 搭配使用的類別載入器的 refid。 | 否 |
也可以透過一個或多個巢狀 <classpath>
元素來指定類別路徑。
在使用 預設 InputHandler 時,暫停建置執行,直到按下 Return 鍵,具體行為由您使用的 InputHandler
實作定義。
<input/>
顯示訊息 按 Return 鍵繼續...
,並暫停建置執行,直到按下 Return 鍵(同樣地,具體行為取決於實作)。
<input>Press Return key to continue...</input>
顯示訊息 按 Return 鍵繼續...
,並暫停建置執行,直到按下 Return 鍵(請參閱上方)。
<input message="Press Return key to continue..."/>
顯示訊息 所有資料即將從資料庫中刪除,繼續 (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.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"/>