屬性

說明

設定專案中的屬性(依據名稱和值),或設定屬性組(從檔案或資源)。屬性區分大小寫。

屬性不可變:誰先設定屬性,就凍結該屬性,在建置的其餘時間都無法變更;屬性絕對不是變數。

有七種方式可以設定屬性

雖然可以結合這些方式,但一次只能使用一種方式。例如,屬性設定的順序可能會發生問題。

要設定的屬性值部分可能包含對其他屬性的參照。這些參照會在設定這些屬性時解析。這也適用於從屬性檔載入的屬性。

可以在這裡找到預先定義的屬性清單。

自 Apache Ant 1.8.0 起,在 Java 5+ 上執行時,可以載入根據Sun DTD定義的 XML 中的屬性。為此,檔案、資源或 url 的名稱必須以.xml結尾。

參數

屬性 說明 必要
名稱 要設定的屬性的名稱。
屬性的值。 name 屬性設定時,這些或巢狀文字之一
位置 將屬性設定為給定檔案的絕對檔案名稱。如果此屬性的值是絕對路徑,則會保持不變(將 /\ 字元轉換為目前的平台慣例)。否則,它會被視為相對於專案 basedir 的路徑並加以展開。
refid 參考在其他地方定義的物件。僅對 路徑結構 或屬性的參考產生合理的結果。
資源 包含屬性設定的類別路徑資源的名稱,格式為屬性檔案。 除非設定 name 屬性,否則為下列其中之一
檔案 要載入的屬性檔案位置。
網址 包含屬性格式設定的網址。
環境 擷取環境變數時要使用的前置詞。因此,如果您指定 environment=myenv,您將能夠透過屬性名稱 myenv.PATHmyenv.TERM 存取作業系統特定的環境變數。請注意,如果您提供最終 . 的屬性 name,它不會加倍;亦即 environment=myenv. 仍會允許透過 myenv.PATHmyenv.TERM 存取環境變數。目前僅在 選定的平台 上實作此功能。歡迎傳送程式碼修補程式,以增加支援此功能的平台數量 ;-).
另請注意,屬性會區分大小寫,即使作業系統上的環境變數不會區分大小寫;例如 Windows 2000 或更新版本的系統路徑變數會設定為 Ant 屬性名稱 env.Path,而不是 env.PATH
執行階段 擷取執行階段屬性時要使用的前置詞。因此,如果您指定 runtime=myrt,您將能夠透過屬性名稱 myrt.availableProcessorsmyrt.maxMemorymyrt.totalMemorymyrt.freeMemory 存取對應於 Runtime 類別中方法的執行階段值。請注意,如果您提供最終 . 的屬性名稱,它不會加倍;亦即 runtime=myrt. 仍會允許存取執行階段屬性,例如 myrt.maxMemory
另請注意,屬性值是 property 執行時所擷取的快照。自 Ant 1.10.4 起
類別路徑 查詢資源時要使用的類別路徑。
類別路徑參考 查詢資源時要使用的類別路徑,以 參考在其他地方定義的 <path> 提供。
前置詞 套用於使用 fileresourceurl 載入的屬性的前綴。如果未指定,會在字首後加上 .
prefixValues 在使用 fileresourceurl 載入的屬性的右側展開時,是否套用前綴。自 Ant 1.8.2 起 否;預設為 false
relative 如果設定為 true,會設定 basedir 的相對路徑。自 Ant 1.8.0 起 否;預設為 false
basedir 計算相對路徑的 basedir自 Ant 1.8.0 起 否;預設為專案的 basedir

OpenVMS 使用者

使用 environment 屬性,此工作會載入 OpenVMS 系統上定義的所有邏輯。具有多個等效名稱的邏輯會對應到一個屬性,其值是所有等效名稱的逗號分隔清單。如果邏輯在多個表格中定義,只會提供最本地的定義(表格優先順序為 PROCESS、JOB、GROUP、SYSTEM)。

OpenVMS 以外的所有作業系統

自 Ant 1.8.2 起,如果 Ant 偵測到它在 Java 5 或更新版本上執行,Ant 會使用 System.getenv(),而不是它自己的作業系統依賴原生實作。對於某些作業系統,與舊版 Ant 相比,這會造成一些微小的差異。如需完整清單,請參閱 Bugzilla Issue 49366。特別是

指定為巢狀元素的參數

類別路徑

Propertyclasspath 屬性為 路徑結構,也可以透過巢狀 classpath 元素設定。

範例

將屬性 foo.dist 設定為值 dist

<property name="foo.dist" value="dist"/>

將屬性 foo.dist 設定為值 dist

<property name="foo.dist">dist</property>

從名為 foo.properties 的檔案讀取一組屬性。

<property file="foo.properties"/>

從網址 https://www.mysite.com/bla/props/foo.properties 讀取一組屬性。

<property url="https://www.mysite.com/bla/props/foo.properties"/>

從名為 foo.properties 的資源讀取一組屬性。

<property resource="foo.properties"/>

請注意,您可以使用下列方式為所有 Ant 建置參照一個全域屬性檔案

<property file="${user.home}/.ant-global.properties"/>

因為 JVM 將 user.home 屬性定義為您的家目錄。user.home 屬性在檔案系統中解析到的位置取決於作業系統版本和 JVM 實作。在基於 Unix 的系統上,這會對應到使用者的家目錄。在現代 Windows 變體上,這很可能會解析到 Documents and SettingsUsers 資料夾中的使用者目錄。Windows 98/ME 等較舊的 Windows 變體較難預測,其他作業系統/JVM 組合也是如此。

讀取系統環境變數並將它們儲存在屬性中,字首為 env。請注意,這只會在選定的作業系統上運作。會顯示兩個值的迴音。

<property environment="env"/>
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/>
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>

此建置檔使用 build.properties 中定義的屬性。關於環境變數 STAGE,某些或所有值可能會被覆寫,例如有 STAGE=testtest.properties,您有特殊值(例如測試伺服器的另一個名稱)。最後,所有這些值都可以透過每個使用者的檔案以個人設定覆寫。

<property environment="env"/>
<property file="${user.name}.properties"/>
<property file="${env.STAGE}.properties"/>
<property file="build.properties"/>

將相對路徑儲存在 foo../my/file.txt

<property name="foo" location="my/file.txt" relative="true" basedir=".."/>

將相對路徑儲存在 foocvs/my/file.txt

<property name="foo" location="my/file.txt" relative="true" basedir="cvs"/>

屬性檔

如所述,此任務將載入儲存在檔案系統或作為類別路徑資源的屬性檔。以下是關於此功能的一些有趣事實

  1. 如果檔案不存在,除了 -verbose 記錄層級之外,不會印出任何內容。這讓您為每個專案提供選用的組態檔,團隊成員可以自訂。
  2. 此格式的規則符合 java.util.Properties
  3. 尾隨空白不會被移除。這可能是您想要的。
  4. 想要不尋常的字元?用 \u0456\" 樣式跳脫。
  5. Ant 屬性會在檔案中擴充
  6. 如果您想擴充在同一個檔案中定義的屬性,並且您使用任務的 prefix 屬性,您必須在擴充屬性時使用相同的字首,或將 prefixValues 設為 true

檔案內屬性擴充非常棒。學習使用它。

範例

build.compiler=jikes
deploy.server=lucky
deploy.port=8443
deploy.url=https://${deploy.server}:${deploy.port}/

關於環境變數的注意事項

當 Ant 開始支援從環境變數設定屬性時,它在 Java 1.2 上執行,其中 System.getEnv 無法使用。因此,我們決定在新的程序中啟動一個指令,它會印出環境變數、分析輸出並建立屬性。在 Ant 1.9.0 中,當我們開始需要 Java 5 時,我們改回 System.getEnv,即使它在某些平台上傳回不同的結果。以下說明的指令仍用於 OpenVMS 或如果 System.getEnv 引發例外狀況。

以下作業系統的指令已在 Execute.java(方法 getProcEnvCommand())中實作

作業系統 指令
os/2 cmd /c set
windows
* win9x command.com /c set
* 其他 cmd /c set
z/os /bin/env /usr/bin/env env取決於讀取權限
unix /bin/env /usr/bin/env env取決於讀取權限
netware env
os/400 env
openvms show logical