我试着做一些类似下面的事情..
<property name="INSTANCE_NAME" value="${PRODUCT5_JBOSS_INSTANCE}" />
PRODUCT5_JBOSS_INSTANCE
-takes来自属性文件的键名的值,所以当我给出上面的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}"
--但这不会work.Because两个$ symbols也不会work.My目标现在是PRODUCT_NUMBER
应该以PRODUCT7
形式获取值,然后PRODUCT7_JBOSS_INSTANCE
应该以product7-jboss
形式从文件中获取值
你能帮我找到解决这个问题的方法吗
发布于 2012-06-15 17:24:26
您可以使用问题Variables from properties file in Ant的答案中所示的macrodef来解决此问题。
这里有一个与您的案例相同的示例。
<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
https://stackoverflow.com/questions/11046433
复制相似问题