2012-02-09 37 views
6

我正在使用ANT 1.7.0如何将一个字符串附加到ant中的属性?

我想创建一个目标,在调用时,将文本附加到一个字符串(保存在属性中)。

例如:

<property name="str.text" value="" /> 

<target name="append.to.property" > 
    <property name="temp.text" value="${str.text}${new.text}" /> 
    <property name="str.text" value="${temp.text}" /> 
</target> 

的问题是,我不能在一个目标覆盖属性值和读取在另一个目标改变的值。

如何将一个字符串附加到ant中的属性?

+1

的可能重复(HTTP [如何通过写蚂蚁财产?]://计算器。 COM /问题/ 1866729 /如何对过度写的属性,在蚂蚁) – skaffman 2012-02-09 07:51:53

回答

11

您无法更改Ant中的属性值。

您可以使用提供可变属性的Ant Contrib变量任务(请参阅http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html)。

<property name="str.text" value="A" /> 
<property name="new.text" value="B"/> 

<target name="append.to.property" > 
    <var name="temp.text" value="${str.text}${new.text}" /> 
    <var name="str.text" value="${temp.text}" /> 
</target> 

<target name="some.target" depends="append.to.property"> 
    <echo message=${str.text}/> 
</target> 
1

通常蚂蚁中的属性在设置后是不可变的。 随着Ant addon Flaka你可能会改变或重写exisiting特性 - 即使userproperties(这些属性经由命令行-Dkey =值设置),即建立一个macrodef和使用它像的是:

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka"> 

<property name="foo" value="bar"/> 

<macrodef name="createproperty"> 
    <attribute name="outproperty"/> 
    <attribute name="input"/> 
    <sequential> 
    <fl:let> @{outproperty} ::= '@{input}'</fl:let> 
    </sequential> 
</macrodef> 

<!-- create new property --> 
<createproperty input="${foo}bar" outproperty="fooo"/> 

    <echo>$${fooo} => ${fooo}</echo> 

    <echo>1. $${foo} => ${foo}</echo> 

<!-- overwrite existing property --> 
<createproperty input="foo${foo}" outproperty="foo"/> 

    <echo>2. $${foo} => ${foo}</echo> 

</project> 

输出

[echo] ${fooo} => barbar 
[echo] 1. ${foo} => bar 
[echo] 2. ${foo} => foobar 

或者您可以使用一些脚本语言(Groovy,Javascript,JRuby ..)并使用ant api:
project.setProperty(String name, String value)覆盖属性。

相关问题