Ant中属性文件的变量

Sti*_*oni 1 ant android

我有一个Android应用程序需要为不同的环境(例如,UAT,登台,制作等)构建.每个环境都需要不同的属性(例如,URL,包等).

我想将所有不同的参数放入单个属性文件中,并为每个参数添加前缀与其匹配的环境.

例如,属性文件将包含dev.home-url = http://home_dev.com开发环境和prod.home-url = http://home.com生产环境.

我使用下面的方法创建一个属性,指向属性文件,前缀为params:

<property file="parameters.properties" prefix="params" />
Run Code Online (Sandbox Code Playgroud)

并使用属性,我使用:

${params.home-url}
Run Code Online (Sandbox Code Playgroud)

当我需要将环境的前缀添加到参数时,问题出现了.它最终看起来像这样,显然无法做到:

${params.${env-prefix}.home-url}
Run Code Online (Sandbox Code Playgroud)

cre*_*ama 6

关于Ant的常见问题是:

我怎么能做<property name="prop" value="${${anotherprop}}"/>(双扩展属性)?

以下Ant构建文件受该FAQ的启发.

parameters.properties

dev.home-url = http://home_dev.com
prod.home-url = http://home.com
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

执行example任务输出:

Buildfile: /workspace/build.xml
example:
     [echo] http://home_dev.com
BUILD SUCCESSFUL
Total time: 405 milliseconds
Run Code Online (Sandbox Code Playgroud)