可以从属性文件中的其他值解析令牌本身吗?
是否可以评估令牌密钥,而无需对令牌进行硬编码?令牌本身可以从属性文件中的其他值解析吗?
例如,如果属性文件具有以下标记( test.properties ):
module_no = 01
module_code = bb
title_01_aa = ABC
title_02_aa = DEF
title_03_aa = GHI
title_01_bb = JKL
title_02_bb = MNO
title_03_bb = PQR
build.xml的内容
<?xml version="1.0" encoding="utf-8"?>
<project default="repl">
<property file="test.properties" />
<target name="repl">
<replace file="test.txt" token="module_title" value="title_${module_no}_${module_code}" />
</target>
</project>
包含文字的示例内容:
Welcome to module_title.
替换任务将导致:
Welcome to title_01_bb.
如何实现这一目标?
Welcome to JKL.
这可能是非常基本的,但请指导我正确的方向。谢谢。
答案 0 :(得分:0)
默认情况下,嵌套属性扩展在Ant中不起作用,如documentation:
中所述大括号嵌套
在默认配置中,Ant不会尝试平衡属性扩展中的大括号,它只会在创建属性名时使用文本到第一个右大括号。即在扩展诸如
${a${b}}
之类的内容时,它将被翻译成两部分:
- 扩展属性
a${b
- 可能没什么用处。- 第二个右大括号产生的文字
醇>}
这意味着您无法轻松扩展名称由属性提供的属性,但对于旧版本的Ant,some workarounds属性。使用Ant 1.8.0和the props Antlib,如果需要这样的功能,可以将Ant配置为使用在那里定义的NestedPropertyExpander。
如果检查变通方法链接,一种解决方案是使用macrodef复制属性:
<property file="test.properties" />
<target name="repl">
<gettitleprop name="titleprop" moduleno="${module_no}" modulecode="${module_code}" />
<replace file="test.txt" token="module_title" value="${titleprop}" />
</target>
<macrodef name="gettitleprop">
<attribute name="name"/>
<attribute name="moduleno"/>
<attribute name="modulecode"/>
<sequential>
<property name="@{name}" value="${title_@{moduleno}_@{modulecode}}"/>
</sequential>
</macrodef>