2012-05-25 58 views
1

我有一個Android應用程序需要針對不同的環境(例如,UAT,舞臺演出,製作等)構建。每個環境需要不同的屬性(例如,URL,包等)。Ant中屬性文件的變量

我想將所有不同的參數放到一個單獨的屬性文件中,並在每個參數前加上它匹配的環境。

例如,屬性文件將包含開發環境的dev.home-url = http://home_dev.com和生產環境的prod.home-url = http://home.com

我用下面創建一個指向性的屬性與params前綴文件:

<property file="parameters.properties" prefix="params" /> 

,並使用一個屬性,我用:

${params.home-url} 

問題來了當我需要將環境的前綴添加到參數。 它最終會這樣看,這顯然無法做到:

${params.${env-prefix}.home-url} 

回答

6

一個經常被問到的問題有關Ant是:

How can I do something like <property name="prop" value="${${anotherprop}}"/> (double expanding the property)?

下面的Ant構建文件被啓發常問問題。

parameters.properties

dev.home-url = http://home_dev.com 
prod.home-url = http://home.com 

的build.xml

<project default="example"> 
    <property name="env-prefix" value="dev" /> 
    <property file="parameters.properties" prefix="params" /> 

    <macrodef name="propertycopy"> 
     <attribute name="name" /> 
     <attribute name="from" /> 
     <sequential> 
      <property name="@{name}" value="${@{from}}" /> 
     </sequential> 
    </macrodef> 

    <target name="example"> 
     <propertycopy name="local.property" from="params.${env-prefix}.home-url" /> 
     <echo>${local.property}</echo> 
    </target> 
</project> 

執行的example任務輸出:

Buildfile: /workspace/build.xml 
example: 
    [echo] http://home_dev.com 
BUILD SUCCESSFUL 
Total time: 405 milliseconds 
+0

從外部讀取屬性文件時的回波剛打印$ {params。$ {env-prefix} .home-url}而不是文件中該屬性的值。 – Stimsoni

+0

我也嘗試了它也從外部屬性文件,它的工作。我更新了我的答案,以反映我所做的。如果屬性文件中不存在,我會得到'$ {params.dev.home-url}'。你使用的是什麼版本的Ant(' $ {ant.version}')?我正在使用1.8.2。 – creemama

+0

啊,我得到了你看到的行爲,如果沒有定義'env-prefix'。如果您嘗試從命令行執行Ant構建文件,請執行'ant -Denv-prefix = dev'。 – creemama