Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANT Build:可以从属性文件中的其他值解析令牌本身吗?_Ant_Replace_Build_Token - Fatal编程技术网

ANT Build:可以从属性文件中的其他值解析令牌本身吗?

ANT Build:可以从属性文件中的其他值解析令牌本身吗?,ant,replace,build,token,Ant,Replace,Build,Token,是否可以从属性文件中的其他值解析令牌本身 是否可以在不硬编码令牌的情况下评估令牌密钥?是否可以从属性文件中的其他值解析令牌本身 例如,如果属性文件具有以下标记(test.properties): build.xml的内容 <?xml version="1.0" encoding="utf-8"?> <project default="repl"> <property file="test.properties" /> <target na

是否可以从属性文件中的其他值解析令牌本身

是否可以在不硬编码令牌的情况下评估令牌密钥?是否可以从属性文件中的其他值解析令牌本身

例如,如果属性文件具有以下标记(test.properties):

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 title_01_bb.
如何做到这一点呢

Welcome to JKL.

这可能是非常基本的,但请务必指导我正确的方向。谢谢。

嵌套属性扩展在Ant中默认不起作用,如中所述:

大括号嵌套

在其默认配置中,Ant不会尝试在属性扩展中平衡大括号,在创建属性名称时,它只使用第一个右大括号之前的文本。也就是说,当扩展类似于
${a${b}}
的内容时,它将被转换为两部分:

  • 属性
    a${b
    的扩展可能没有什么用处
  • 由第二个右大括号生成的文本
    }
  • 这意味着您不能使用由属性给出名称的轻松扩展属性,但对于旧版本的Ant,则有。使用Ant 1.8.0和,如果需要这样的功能,您可以将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>
    
    
    
    您可能想看一看如何显示一些解决方案,从
    ${title\u${module\u no}}{u${module\u code}}}
    的角度来看,“双重扩展属性”。感谢@manouti的详细解释。这对我很管用。我的原始构建有更多的链接任务,因此最初您的解决方案作为独立任务工作,但在我的构建中失败。我只需在构建序列的更早阶段生成属性(示例中为gettitleprop),一切正常。这为我节省了很多精力:)
    Welcome to JKL.
    
    <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>