我试图做类似下面的事情。
<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
你能帮我解决这个问题吗?
答案 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