輸入

說明

在建置過程中提示使用者輸入,以允許使用者互動。為此,它使用已設定的 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 的比較會區分大小寫。如果您希望接受 aA,您需要在 validargs 中定義兩個引數。
addproperty 從輸入建立的屬性的名稱。行為等同於 property 任務,這表示現有的屬性無法覆寫。
defaultvalue 定義從輸入建立的屬性的預設值。如果未收到任何輸入,屬性值將設定為預設值。

指定為巢狀元素的參數

處理常式

自 Ant 1.7 起,可使用巢狀 <handler> 元素來指定 InputHandler,以便在不同的 Input 任務間使用不同的 InputHandler

屬性 說明 必要
類型 下列其中一種:defaultpropertyfilegreedysecure自 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"/>