2012-02-09 43 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)覆蓋屬性。

相關問題