我正在使用ANT 1.7.0
我想创建一个调用的目标,将文本附加到字符串(保存在属性中)。
例如:
<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?
中的属性答案 0 :(得分:12)
您无法更改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 :(得分:1)
通常,ant中的属性一旦设置就不可变。
使用Ant addon Flaka,您可以更改或覆盖现有属性 - 甚至是userproperties(通过命令行-Dkey = value设置的属性),即创建一个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)
来覆盖属性。
答案 2 :(得分:0)
如果您想在现有属性值中附加字符串,请按照以下步骤操作。
1
Property file 1
2
string to append
3
ANT Script
4
Final Property value
供参考:Wordpress Link