在ant build.xml中动态传递多个值

时间:2012-06-15 07:33:36

标签: ant

我试图做类似下面的事情。

 <property name="INSTANCE_NAME" value="${PRODUCT5_JBOSS_INSTANCE}" />

PRODUCT5_JBOSS_INSTANCE - 从属性文件中获取该键名的值所以当我像上面这样给出INSTANCE_NAME = product5-jboss的值时。

但对于不同的产品,如

,上述行重复多次
  <property name="INSTANCE_NAME" value="${PRODUCT6_JBOSS_INSTANCE}" />
   <property name="INSTANCE_NAME" value="${PRODUCT7_JBOSS_INSTANCE}" />

所以在value="${PRODUCT7_JBOSS_INSTANCE}"里面我想动态传递product7,如下所示..

value="${${PRODUCT_NUMBER}_JBOSS_INSTANCE}" - 但这不起作用。因为两个$符号无法正常工作。我现在的目标是PRODUCT_NUMBER应该将值设为PRODUCT7然后  PRODUCT7_JBOSS_INSTANCE应该从文件中获取值product7-jboss

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您可以使用macrodef解决此问题,如问题Variables from properties file in Ant的答案所示。

以下是您案例的相同示例。

<project default="test">

    <!-- override on command line -->
    <property name="PRODUCT_NAME" value="PRODUCT5"/>

    <property file="test.properties"/>

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

    <target name="test">
        <echo>PRODUCT_NAME: ${PRODUCT_NAME}</echo>
        <property-read name="instance" from="${PRODUCT_NAME}"/>
        <echo>DYNAMIC PROPERTY VALUE: ${instance}</echo>
    </target>

</project>

属性定义:

$ cat test.properties
PRODUCT5_JBOSS_INSTANCE=product5.jboss.instance
PRODUCT7_JBOSS_INSTANCE=product7.jboss.instance

输出:

$ ant -DPRODUCT_NAME=PRODUCT7
Buildfile: C:\Users\sudocode\tmp\ant\build.xml

test:
     [echo] PRODUCT_NAME: PRODUCT7
     [echo] DYNAMIC PROPERTY VALUE: product7.jboss.instance

BUILD SUCCESSFUL
Total time: 0 seconds
$
$
$ ant -DPRODUCT_NAME=PRODUCT5
Buildfile: C:\Users\sudocode\tmp\ant\build.xml

test:
     [echo] PRODUCT_NAME: PRODUCT5
     [echo] DYNAMIC PROPERTY VALUE: product5.jboss.instance

BUILD SUCCESSFUL
Total time: 0 seconds