0

我正在尝试做类似下面的事情..

 <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

你能帮我解决这个问题吗

4

1 回答 1

2

您可以使用宏定义来解决此问题,如对 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
于 2012-06-15T09:24:25.650 回答